Electron.js+Socket.io报错:ERR_NAME_NOT_RESOLVED 求解决方案
错误:net::ERR_NAME_NOT_RESOLVED 解决方案
问题原因
Electron通过file://协议加载本地index.html时,前端代码中var socket = io()未指定Socket.IO服务器地址,客户端会默认沿用当前页面的file协议拼接连接路径,导致请求不存在的http://file/socket.io/地址,最终触发域名解析失败的错误。
修复步骤与代码修改
1. 明确指定前端Socket.IO连接地址
修改index.html中的Socket.IO初始化代码,直接指向运行在本地3000端口的服务器:
<script src="node_modules/socket.io-client/dist/socket.io.js"></script> <script> // 指定服务器地址,避免默认使用file协议 var socket = io('http://localhost:3000') socket.on('connect', () => { console.log('已连接到Socket.IO服务器') }) socket.on('atualizarEstado', estadoDoJogo => { // 处理从服务器接收的游戏更新数据 // ... }) </script> <script src="menu.js"></script> <script src="game.js"></script> <script src="player1.js"></script> <script src="player2.js"></script>
2. 优化服务器启动流程
在package.json中添加启动服务器的脚本,方便同时启动服务器与Electron:
{ "name": "battlemath", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "start": "electron .", "server": "node server.js" }, "keywords": [], "author": "", "license": "ISC", "devDependencies": { "electron": "^25.2.0" }, "dependencies": { "electron-reload": "^2.0.0-alpha.1", "express": "^4.18.2", "socket.io": "^4.7.0", "socket.io-client": "^4.7.0" } }
使用时先执行npm run server启动Socket.IO服务器,再执行npm start启动Electron应用。
3. 可选:统一Socket.IO连接逻辑
当前Electron主进程与渲染进程(前端)各自创建了Socket.IO连接,若无需双端独立连接,可二选一优化:
- 若仅通过主进程处理Socket.IO通信,可移除前端的Socket.IO代码,通过Electron的IPC机制在主进程与渲染进程间传递数据。
- 若保留渲染进程的连接,可根据需求删除主进程中的Socket.IO相关代码。
额外注意事项
- 确保
server.js中server.listen(3000)正常监听端口,无端口占用冲突。 - Electron的
webPreferences中nodeIntegration: true在新版本中已不推荐,建议后续改用contextIsolation: false配合preload脚本的方式实现进程间通信。
内容的提问来源于stack exchange,提问作者Macaco Branco
相关产品推荐
相关产品推荐

