
如何在 NW.js 桌面应用中使用 Socket.IO 连接 Node.js 服务器【免费下载链接】socket.ioBidirectional and low-latency communication for every platform项目地址: https://gitcode.com/gh_mirrors/so/socket.io要在 NW.js 桌面应用中和 Node.js 服务器做双向通信可以直接使用 Socket.IO服务端用socket.io包监听一个 HTTP 端口NW.js 窗口里加载一个普通 HTML 页面页面脚本中通过socket.io-client连接该地址之后就能互发事件。本仓库的 nwjs 示例 就是这条完整路径NW.js 客户端连接本地http://localhost:3000上的 Socket.IO 服务器发送一个hello事件并在页面上实时显示连接状态与当前传输方式transport。示例结构与运行前提示例位于 examples/nwjs-example/包含两部分客户端NW.js 应用index.html 是 NW.js 加载的页面逻辑写在 index.js 中package.json 声明了唯一依赖socket.io-client示例版本为^4.7.5服务器server/index.js其 server/package.json 声明依赖socket.io^4.7.5并提供了npm start启动脚本。运行前提是本地已安装 Node.js 和 NW.js 可执行文件nw客户端启动命令nw .依赖它。客户端和服务器各自有独立的node_modules分别安装依赖。先启动 Socket.IO 服务器进入 server 目录安装依赖并启动cd server # install the dependencies $ npm i # start the server $ npm startnpm start实际执行的是node index.js。服务器代码很直接import { Server } from socket.io; const io new Server(); io.on(connection, (socket) { console.log(connect: ${socket.id}); socket.on(hello, (val) { console.log(val); }); socket.on(disconnect, () { console.log(disconnect: ${socket.id}); }); }); io.listen(3000);服务器监听 3000 端口连接时打印connect: socket.id收到hello事件时打印其参数断开时打印disconnect: socket.id。这些终端输出是验证客户端是否连上的第一手依据。在 NW.js 中运行客户端回到示例根目录安装客户端依赖后直接用nw启动整个目录# install the dependencies $ npm i # start the app $ nw .因为 package.json 中main: index.htmlnw .会打开 index.html。页面初始显示Status: Disconnected和Transport: N/A并调用registerListeners注册事件、发出emit(hello, world)。客户端核心逻辑在 index.jsconst { io } require(socket.io-client); const socket io(http://localhost:3000); exports.registerListeners function ({ statusSpan, transportSpan }) { function onConnect() { statusSpan.innerText Connected; transportSpan.innerText socket.io.engine.transport.name; socket.io.engine.on(upgrade, (transport) { transportSpan.innerText transport.name; }); console.log(connect ${socket.id}); } if (socket.connected) { onConnect(); } socket.on(connect, onConnect); socket.on(connect_error, (err) { console.log(connect_error due to ${err.message}); }); socket.on(disconnect, (reason) { statusSpan.innerText Disconnected; transportSpan.innerText N/A; console.log(disconnect due to ${reason}); }); } exports.emit function (...args) { socket.emit(...args); };这里有两点值得注意连接地址http://localhost:3000是硬编码在 index.js 第 3 行的服务器如果换端口或部署到别的地址需要在这里同步修改connect回调里先处理socket.connected已为真的情况再注册监听避免漏掉已经建立好的连接同时监听connect_error和disconnect把失败原因和断开原因打到控制台。transport 显示来自socket.io.engine.transport.name并在upgrade事件触发时更新用于观察 Socket.IO 在握手后从轮询切换到 WebSocket 的过程。验证连接是否成功按上面步骤启动服务器和应用后可以从三处确认整条链路通了NW.js 窗口内Status从Disconnected变为ConnectedTransport显示当前传输方式若连接失败控制台会输出connect_error due to 原因页面状态则保持或回到Disconnected服务器终端先出现connect: socket.id紧接着打印客户端发来的hello参数即world之后关闭 NW.js 应用时会看到disconnect: socket.id客户端控制台连接成功时输出connect socket.id断开时输出disconnect due to reason。复用到自己的项目时如果你的目标不是跑示例而是集成到自己的 NW.js 应用可以照示例的路径做你的 NW.js 页面或页面加载的脚本中require(socket.io-client)并用io(你的服务器地址)建立连接依赖里加入socket.io-clientNode.js 侧引入socket.ionew Server()后io.listen(端口)在connection回调里注册你要处理的事件名客户端与服务器两端使用同一套 Socket.IO 4.x 系列版本示例统一使用^4.7.5事件名在socket.emit和socket.on处保持一致即可对上。示例中客户端与服务器都是独立安装依赖、分别启动的如果你的 NW.js 打包流程对node_modules有额外约束以示例的package.json依赖声明为准做对应调整。【免费下载链接】socket.ioBidirectional and low-latency communication for every platform项目地址: https://gitcode.com/gh_mirrors/so/socket.io创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考