新闻详情

新闻详情

首页 / 资讯中心 / 详情

如何在 NW.js 桌面应用中使用 Socket.IO 连接 Node.js 服务器

发布时间:2026/9/9 22:22:22来源:尧图网络
如何在 NW.js 桌面应用中使用 Socket.IO 连接 Node.js 服务器
如何在 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),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

AI工作流实战:GPT图片生成+无限画布+Gemini打造高效电商详情页 2026/9/9 23:10:35

AI工作流实战:GPT图片生成+无限画布+Gemini打造高效电商详情页

做电商详情页,很多人还在走一条非常熟悉的流程:打开电脑看竞品,截图存一份;打开设计软件临摹版式,调半天文案;再打开素材网站,下几张图还得担心授权和分辨率。一套详情页做下来,少则…

阅读更多 →
Windows 11 广告清理指南:彻底关闭推荐与推送的完整方案 2026/9/9 23:10:35

Windows 11 广告清理指南:彻底关闭推荐与推送的完整方案

最近不少朋友找我吐槽:新买的 Windows 11 电脑,用不到一周就开始“闹情绪”——开始菜单推荐区冒出一堆没用过的软件,锁屏界面时不时教你“小技巧”,设置主页催你“完成设备设置”,连文件资源管理器都开始推销 Microso…

阅读更多 →
开源自托管看板工具Kanass:从Docker部署到团队任务管理实战 2026/9/9 23:10:35

开源自托管看板工具Kanass:从Docker部署到团队任务管理实战

前段时间我把团队的日常任务管理从微信群和 Excel 里彻底搬了出来,换成一个叫 Kanass 的开源看板工具。Kanass 这个名字你可能不熟,简单说,它是一个长得像 Trello 的自托管看板任务管理软件,可以部署在自己的服务器上,…

阅读更多 →
图片无损放大哪个方法好?四个实用方法来帮你 2026/9/9 23:10:35

图片无损放大哪个方法好?四个实用方法来帮你

在日常工作和学习生活中,相信很多人都遇到过这样的尴尬场景:好不容易找到一张满意的素材图,结果分辨率过低,一放大就全是马赛克。无论是做PPT汇报、设计海报,还是处理老旧照片,怎么把图片放大四倍保持清晰度…

阅读更多 →
矩阵方法:从SVD到PCA,数据分析与信号处理的共同语言 2026/9/9 23:10:35

矩阵方法:从SVD到PCA,数据分析与信号处理的共同语言

在数据分析和信号处理的学习路径里,矩阵方法(Matrix Methods)是一个绕不开的核心主题。麻省理工学院的 18.065 课程 Matrix Methods in Data Analysis, Signal Processing, and Machine Learning 正是围绕这个主题展开的系统课程,…

阅读更多 →
Flink核心概念与实战:状态、时间语义、Checkpoint全解析 2026/9/9 23:07:34

Flink核心概念与实战:状态、时间语义、Checkpoint全解析

干了这么多年实时计算,我越来越觉得Flink已经不只是“一个框架”这么简单,它基本把流处理这件事变成了行业默认标准。不管是实时数仓、实时风控、用户画像,还是简单的数据同步,面试和实际开发里绕不开的都是它。这篇文章是我梳理F…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞