我有一个http / websocket nodejs服务器。我想使用访问url的动作来触发websocket发送到不同的套接字客户端。
var WebSocketServer = require('ws').Server
var wss = new WebSocketServer({port: 8081});
var http = require("http");
var sys = require("sys");
var server = http.createServer(function(request,response){
response.writeHeader(200, {"Content-Type": "text/plain"});
response.write("Hello");
if (request.url == "/"){
sys.puts("hit site")
wss.on('connection', function(ws){
sys.puts("sent msg");
ws.send("photo plox");
});
}
response.end();
}).listen(8000);
当浏览器点击网址时,我的websocket客户端没有收到消息。如果我在没有连接客户端的情况下多次访问该站点,然后再连接客户端,则每次访问都会发送一条消息。
如何使用浏览器URL访问来触发websocket发送?
答案 0 :(得分:5)
问题是您没有正确管理与WebSocketServer的连接。在您的代码中,您只是在收到HTTP请求后才监听连接。尝试这样的事情:
var WebSocketServer = require('ws').Server
var wss = new WebSocketServer({port: 8081});
var http = require("http");
var sys = require("sys");
var server = http.createServer(function(request,response){
response.writeHeader(200, {"Content-Type": "text/plain"});
response.write("Hello");
if (request.url == "/"){
for (var i = 0; i < wss.client.length; i++) {
var ws = wss.clients[i];
sys.puts("sent msg");
ws.send("photo plox");
}
}
response.end();
}).listen(8000);
答案 1 :(得分:0)
socket.io有一个很好的例子,你可能需要改变一些东西。
http://coenraets.org/blog/2012/10/real-time-web-analytics-with-node-js-and-socket-io/