在前端开发中,使用 WebSocket 进行实时数据通信已经成为了常见的技术需求。而作为一款强大的实时通信技术,WebSocket 通过与服务器之间的连接传输数据,使得客户端的 Web 应用程序可以向服务器发送实时信息并获得服务器的实时响应。
本文将介绍 npm 包 websocket-relay 的使用教程,该包用于将 WebSocket 消息进行转发。包的详细信息可以在 https://www.npmjs.com/package/websocket-relay 上查看。
安装
要使用 websocket-relay 包,需要先安装 Node.js 和 npm,然后使用以下命令进行安装:
npm install websocket-relay
使用
服务端
要在 WebSocket 服务器上使用 websocket-relay 包,可以按照以下方式使用:
const WebSocket = require('ws'); const Server = require('websocket-relay').Server; const wss = new WebSocket.Server({ port: 8080 }); const relay = new Server(wss);
其中,const wss = new WebSocket.Server({ port: 8080 });
创建了一个 WebSocket 服务器实例,监听在 8080 端口。const relay = new Server(wss);
创建了一个转发器实例,并将其服务于创建的服务器 wss。
客户端
要在客户端上使用 websocket-relay 包,可以按照以下方式使用:
const WebSocket = require('ws'); const ws = new WebSocket('ws://localhost:8080');
其中,const ws = new WebSocket('ws://localhost:8080');
创建了一个 WebSocket 客户端并连接到了上述搭建的服务器。
消息转发
当一个客户端发送消息时,可以在服务器端使用以下代码将消息转发到其他已连接的客户端:
relay.on('message', function(message) { wss.clients.forEach(client => { if (client.readyState === WebSocket.OPEN) { client.send(message); } }); });
示例代码
以下代码演示了如何使用 websocket-relay 包通过 WebSocket 实现简单的消息转发:
-- -------------------- ---- ------- -- --------- ----- --------- - -------------- ----- ------ - ---------------------------------- ----- --- - --- ------------------ ----- ---- --- ----- ----- - --- ------------ ------------------- ----------------- - -------------------------- -- - -- ------------------ --- --------------- - --------------------- - --- --- -- --------- ----- --------- - -------------- ----- -- - --- --------------------------------- ------------- ---------- - ---------------------- -- ---------- --- ---------------- -------------- - --------------------- ------- ------ --- ----- -------- - ------------------------------------- ------ -------------- ------- -------------- --- ------------------- --------------- - --------------- ---
以上代码使用 Node.js 运行,可以通过创建两个命令行窗口,分别运行 server.js 和 client.js 文件进行测试。当一个客户端发送消息时,服务器会将该消息转发到其他已连接的客户端中。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/600671068dd3466f61ffddf2