2017-07-31 65 views
0

我想測試一個簡單的socket.io websocket服務器。我在命令行中用於測試socket.io的工具是iocat。這臺服務器有什麼問題?

服務器:

var io = require('socket.io')(12345); 

io.on('connection', function(socket){ 
    console.log('a user connected'); 
    socket.on('disconnect', function(){ 
    console.log('user disconnected'); 
    }); 

    socket.on('test', function(msg){ 
    console.log('test msg: ' + msg); 
    io.emit('test', 'Test answer'); 
    }); 
}); 

node socket.js命令啓動它,並關閉這臺機器上運行的Web服務器。

這工作。

[email protected]:~/prj/client$ iocat --socketio ws://localhost:12345 
> test 
> asdfasdf 
> 

服務器響應:

[email protected]:~/prj/client$ node socket.js 
a user connected 
user disconnected 
a user connected 
user disconnected 

任何知道爲什麼服務器的連接和斷開事件,但沒有爲「測試」消息迴應好不好?我更喜歡命令行測試器,因爲我想將我的Web服務器放在https,Apache代理和子URL上。所以我想確保我的寶貝一步,沒有別的干擾。

+0

服務器沒有問題。正如我在下面修改的答案所解釋的那樣,您的客戶端正在發送消息名稱「message」,而不是「test」,以便服務器永遠不會看到它。 – jfriend00

回答

1

看起來您有一個socket.io服務器,但您正在嘗試使用webSocket命令行實用程序與它進行通信。

一個socket.io服務器確實使用一個webSocket作爲基層傳輸,但在webSocket上添加了一個額外的層,因此需要一個socket.io客戶端來完成與套接字的連接和交換數據.io服務器。

所以:

socket.io server <==> socket.io client 
webSocket server <==> webSocket client 

所以,你需要一個socket.io客戶端與socket.io服務器進行通信,或者你可以啞服務器到使用的幾個可用的WebSocket模塊的任何一個短短的WebSocket服務器爲nodejs。


答案的新的部分,現在這個問題已經演變成一個有關如何使用iocat正確的問題。

一個socket.io消息有兩個部分:消息名稱和消息數據。通過使用iocat,您僅發送數據(默認消息名稱爲message)。看起來您需要使用-e選項將消息名稱設置爲您要發送的「測試」。或者更改服務器以偵聽iocat使用的默認消息名稱message。 iocat不允許您直接在每次傳輸中指定消息名稱和消息數據,這有點奇怪。

+0

正如你在回答我正在編輯的問題。我現在使用了iocat,它支持socket.io,但也沒有工作。 –

+0

@NelsonTeixeira - 我對'iocat'一無所知 - 我使用庫作者編寫的真正的socket.io客戶端,並且沒有像這樣的任何困難。我知道使用一個常規的socket.io庫,連接URL在它上面有各種查詢參數,它們是初始連接建立的一部分。是否有任何理由不只是使用實際的socket.io客戶端庫自己寫一個10行socket.io客戶端?您可以爲瀏覽器或node.js應用程序創建一個。這就是我想要測試的時候所做的。然後,你沒有調試/擁有iocat。 – jfriend00

+0

我想要一個命令行測試的原因是因爲我想在Apache代理,子url和https後面使用它,並且想要在命令行中測試各種配置,所以我可以對它進行嬰兒測試。 :) –