Nodejs websocket服务器,http触发器

Ash*_*rke 2 websocket node.js 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);
Run Code Online (Sandbox Code Playgroud)

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

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

ksi*_*ons 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);
Run Code Online (Sandbox Code Playgroud)

  • 我认为你可以使用[`wss.clients`](https://github.com/einaros/ws#server-sending-broadcast-data)而不必自己跟踪连接. (2认同)