Nodejs websocket服务器,http触发器

时间:2013-10-19 05:25:40

标签: node.js websocket socket.io

我有一个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发送?

2 个答案:

答案 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/

相关问题