我不知道
this
是你正在使用的软件包,但是你正在使用的任何软件包都是相似的。自述文件中有两个例子:
服务器示例
在服务器示例中,他们创建了一个web套接字服务器:
const WebSocket = require('ws');
const wss = new WebSocket.Server({ port: 8080 });
wss.on('connection', function connection(ws) {
ws.on('message', function incoming(message) {
console.log('received: %s', message);
});
ws.send('hello from the server!');
});
这将创建监听套接字服务器。它添加了一个事件监听器
message
因此,当客户端连接到服务器时,该客户端可以发送消息,事件处理程序将启动。
在该事件侦听器之后,它发送字符串
'hello from the server!'
。该发送调用不会触发上述事件处理程序,因为该发送调用发生在套接字的服务器端。它正在发送一条消息,以便在该套接字的客户端接收。
客户端示例(通常在浏览器中)
const WebSocket = require('ws'); // omit this line if including ws via <script> tag
const ws = new WebSocket('ws://www.host.com/path');
ws.on('open', function open() {
ws.send('hello from the client!');
});
ws.on('message', function incoming(data) {
console.log(data);
});
在第一个示例中,这是一个连接到套接字服务器的客户端脚本。它连接到
'connection'
事件将在上面的套接字服务器上引发。然后套接字服务器调用
ws.send('hello from the server!');
我们的客户端脚本在这里为
'message'
所以它会启动并打印出来
“服务员您好!”
到浏览器控制台。
这个客户端脚本还设置了一个
'open'
成功连接到套接字服务器后激发的事件处理程序。所以它会开火并发射
'hello from the client!'
到服务器。服务器的
“信息”
将启动,在服务器的终端中,您将看到
“客户您好!”
打印出来。
在您的示例中,您是从服务器(您的服务器端routes.js文件)执行此操作的
wss.clients.forEach(function each(client) {
if (client.readyState === WebSocket.OPEN) {
client.send(data);
}
});
你在那里做的是迭代所有已成功连接到socket服务器的已连接客户端,并分别向每个客户端发送消息。这仍然会
不
启动服务器端
on
事件处理程序
“信息”
当每个插座第一次连接时,你就在每个插座上设置好了。它将在浏览器的客户端启动处理程序。
根据您在上面的最后评论进行编辑:
要想做你想做的事,你需要在客户机上做这样的事情:
myButton.onClick = function (e) {
ws.send("Hey everyone! I'm Chev!");
};
然后在连接处理程序中的服务器上设置如下消息处理程序:
wss.on('connection', function connection(ws) {
ws.on('message', function incoming(message) {
wss.clients.forEach(function each(client) {
if (client !== ws && client.readyState === WebSocket.OPEN) {
client.send(message);
}
});
});
});
你可以
消息
可以是一个对象而不是字符串,这样就可以根据该对象的属性执行不同的操作,但为了简单起见,我让服务器向服务器的其余部分广播它接收到的任何消息。
请注意if语句检查,以确保我们不会将消息重新广播回发送消息的同一客户端。