2013-10-19 76 views
1

我有一个http/websocket nodejs服务器。我想使用访问url的动作来触发websocket发送到不同的套接字客户端。Nodejs websocket服务器,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 == "/"){ 
    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发送?

+0

检查此[链接](https://github.com/Worlize/WebSocket-Node),可能是关于消息类型使用sendUTF为utf8的类型或sendBytes二进制类型的消息 – Somesh

回答

4

问题是您没有正确管理与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); 
+2

我认为这个问题你可以使用['wss.clients'](https://github.com/einaros/ws#server-sending-broadcast-data)而不必自己跟踪连接。 – robertklep

+0

@robertklep不错的提示!我不是专家,我只是发现了明显的问题 – ksimons

+0

编辑per @ robertklep的评论。 – ksimons