Nodejs websocket服务器,http触发器

我有一个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。 如果我没有连接客户端多次访问该站点,然后再连接客户端,则每次访问都会发送一条消息。

我怎么能使用浏览器的url访问来触发一个websocket发送?

问题是你没有正确地pipe理到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/