gpt4 book ai didi

javascript - Node.js WebSocket 广播

转载 作者:搜寻专家 更新时间:2023-10-31 23:29:48 25 4
gpt4 key购买 nike

我正在使用 ws library对于 Node.js 中的 WebSockets 和我正在尝试库示例中的这个示例:

var sys = require("sys"),
ws = require("./ws");

ws.createServer(function (websocket) {
websocket.addListener("connect", function (resource) {
// emitted after handshake
sys.debug("connect: " + resource);

// server closes connection after 10s, will also get "close" event
setTimeout(websocket.end, 10 * 1000);
}).addListener("data", function (data) {
// handle incoming data
sys.debug(data);

// send data to client
websocket.write("Thanks!");
}).addListener("close", function () {
// emitted when server or client closes connection
sys.debug("close");
});
}).listen(8080);

一切正常。它可以工作,但运行 3 个客户端,例如,发送“Hello!”来自一个将使服务器只回复“谢谢!”给发送消息的客户端,而不是所有客户端。

如何广播“谢谢!”当有人发送“你好!”时发送给所有连接的客户端?

谢谢!

最佳答案

如果你想发送给所有客户,你必须跟踪他们。这是一个示例:

var sys = require("sys"),
ws = require("./ws");

// # Keep track of all our clients
var clients = [];

ws.createServer(function (websocket) {
websocket.addListener("connect", function (resource) {
// emitted after handshake
sys.debug("connect: " + resource);

// # Add to our list of clients
clients.push(websocket);

// server closes connection after 10s, will also get "close" event
// setTimeout(websocket.end, 10 * 1000);
}).addListener("data", function (data) {
// handle incoming data
sys.debug(data);

// send data to client
// # Write out to all our clients
for(var i = 0; i < clients.length; i++) {
clients[i].write("Thanks!");
}
}).addListener("close", function () {
// emitted when server or client closes connection
sys.debug("close");
for(var i = 0; i < clients.length; i++) {
// # Remove from our connections list so we don't send
// # to a dead socket
if(clients[i] == websocket) {
clients.splice(i);
break;
}
}
});
}).listen(8080);

我能够让它广播给所有客户端,但它并没有针对所有情况进行严格测试。不过,一般概念应该可以帮助您入门。

编辑:顺便说一句,我不确定 10 秒关闭的目的是什么,所以我已将其注释掉。如果您尝试向所有客户端广播,那将毫无用处,因为它们只会不断断开连接。

关于javascript - Node.js WebSocket 广播,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6098313/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com