Javascript Node.js WebSocket广播
我在Node.js和 我正在从库示例中尝试此示例:Javascript Node.js WebSocket广播,javascript,node.js,websocket,Javascript,Node.js,Websocket,我在Node.js和 我正在从库示例中尝试此示例: var sys = require("sys"), ws = require("./ws"); ws.createServer(function (websocket) { websocket.addListener("connect", function (resource) { // emitted after handshake sys.debug("connect: " + resourc
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!”将使服务器只向发送消息的客户端回复“谢谢”,而不是向所有客户端回复
当有人发送“你好!”时,我如何向所有连接的客户端广播“谢谢”
谢谢 我建议您使用。它具有现成的示例web聊天功能,还提供了客户端套接字技术的抽象层(Safari、Chrome、Opera和Firefox支持WebSockets,但由于ws-protocol中存在安全漏洞,现在在Firefox和Opera中禁用了WebSockets)。如果要发送到所有客户端,你必须跟踪他们。以下是一个示例:
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);
var sys=require(“sys”),
ws=需要(“./ws”);
//#跟踪我们的所有客户
var客户=[];
ws.createServer(函数(websocket){
addListener(“连接”,函数(资源){
//握手后发出
系统调试(“连接:+资源”);
//#添加到我们的客户名单中
客户端推送(websocket);
//服务器在10秒后关闭连接,也将获得“关闭”事件
//设置超时(websocket.end,10*1000);
}).addListener(“数据”),函数(数据){
//处理传入数据
系统调试(数据);
//向客户端发送数据
//#写信给我们所有的客户
对于(变量i=0;i
我能够让它向所有客户广播,但并不是所有情况下都经过严格测试。不过,总体概念应该会让您开始学习
编辑:顺便说一句,我不确定10秒的收盘是为了什么,所以我把它注释掉了。如果您试图向所有客户端广播,这是毫无用处的,因为它们会一直断开连接。谢谢您的推荐,回答,但我认为在经过1年(+/-)所有浏览器支持的WebSocket之后。:-)Chrome支持Websockets,Firefox r(尽管在FF中默认禁用)@Matt编辑了答案的文本。@vhye:只是为了澄清@bjord的答案。IO是一个抽象通信的客户机和服务器库。如果WebSockets可用,那么Socket.IO将使用它。如果闪存可用,则Socket.IO可以使用基于闪存的WebSocket后备/填充/多填充。如果两者都不可用,则Socket.IO使用较慢的长轮询方法。换句话说,Socket.IO抽象了底层的transports.onteria,非常感谢!工作我要开始了!:-)谢谢(以及所有其他人对答案的感谢),祝你好运!