最简单、最优雅的方式
验证与插座工作。io v3.1.1
很简单:
client.emit("your message");
就是这样。好吧,但是它是如何工作的呢?
最小工作示例
下面是一个简单的客户机-服务器交互示例,其中每个客户机定期接收包含序列号的消息。每个客户端都有一个唯一的序列,这就是“我需要向特定的客户端发送消息”发挥作用的地方。
服务器
server.js
const
{Server} = require("socket.io"),
server = new Server(8000);
let
sequenceNumberByClient = new Map();
// event fired every time a new client connects:
server.on("connection", (socket) => {
console.info(`Client connected [id=${socket.id}]`);
// initialize this client's sequence number
sequenceNumberByClient.set(socket, 1);
// when socket disconnects, remove it from the list:
socket.on("disconnect", () => {
sequenceNumberByClient.delete(socket);
console.info(`Client gone [id=${socket.id}]`);
});
});
// sends each client its current sequence number
setInterval(() => {
for (const [client, sequenceNumber] of sequenceNumberByClient.entries()) {
client.emit("seq-num", sequenceNumber);
sequenceNumberByClient.set(client, sequenceNumber + 1);
}
}, 1000);
服务器开始在端口8000上监听传入的连接。一旦建立了新的连接,该客户端就被添加到跟踪其序列号的映射中。服务器还侦听断开连接事件,以便在客户端离开映射时将其从映射中删除。
每一秒,都会触发一个计时器。当它这样做时,服务器遍历映射,并向每个客户端发送带有当前序列号的消息,然后立即增加它。这就是它的全部。容易peasy。
客户端
客户端部分甚至更简单。它只是连接到服务器并侦听seq-num消息,并在每次消息到达时将其打印到控制台。
client.js
const
io = require("socket.io-client"),
ioClient = io.connect("http://localhost:8000");
ioClient.on("seq-num", (msg) => console.info(msg));
运行示例
安装所需的库:
npm install socket.io@3.1.1 socket.io-client@3.1.1
运行服务器:
node server
打开其他终端窗口,运行以下命令生成任意数量的客户端:
node client
我还准备了一个要点与完整的代码在这里。