2013-10-19 109 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