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 に答える