我有一个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 时没有收到消息。如果我在没有连接客户端的情况下多次访问该站点,然后连接客户端,则每次访问一次发送 1 条消息。
如何使用浏览器 url 访问来触发 websocket 发送?
问题是您没有正确管理与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);
socket.io 有一个很好的例子,你可能不得不改变一些东西。
http://coenraets.org/blog/2012/10/real-time-web-analytics-with-node-js-and-socket-io/