2

我有一个 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);

当浏览器点击 url 时,我的 websocket 客户端没有收到消息。如果我在没有连接客户端的情况下多次访问该站点,然后再连接客户端,则每次访问都会同时发送 1 条消息。

如何使用浏览器 url 访问来触发 websocket 发送?

4

2 回答 2

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);
于 2013-10-19T07:40:07.643 回答
0

socket.io 有一个很好的例子,你可能需要改变一些东西。

http://coenraets.org/blog/2012/10/real-time-web-analytics-with-node-js-and-socket-io/

于 2014-01-22T12:34:56.520 回答