[英]what's wrong with this server?
我正在嘗試測試一個簡單的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服務器。
這工作了。 服務器對連接和斷開連接事件的響應正常,但對“測試”消息的響應不正確:
me@whatever:~/prj/client$ iocat --socketio ws://localhost:12345
> test
> asdfasdf
>
服務器響應:
me@whatever:~/prj/client$ node socket.js
a user connected
user disconnected
a user connected
user disconnected
知道為什么嗎? 我希望使用命令行測試器,因為我想將Web服務器放在https,Apache代理和子URL上。 因此,我想確保自己能踩到它,並且沒有其他干擾。
看來您有一個socket.io服務器,但是您正在嘗試使用webSocket命令行實用程序與之通信。
socket.io服務器確實在底層使用了webSocket作為基本級別的傳輸,但是在webSocket的頂部添加了一個附加層,因此需要socket.io客戶端來完成連接並與socket.io服務器交換數據。
所以:
socket.io server <==> socket.io client
webSocket server <==> webSocket client
因此,您需要一個socket.io客戶端與您的socket.io服務器進行通信,或者您可以使用可用於nodejs的多個webSocket模塊中的任何一個將服務器啞化為僅一個webSocket服務器。
答案的新部分,現在該問題已演變為有關如何正確使用iocat
的問題。
一個socket.io消息有兩個部分,消息名稱和消息數據。 使用iocat
,您僅發送數據(默認消息名稱為message
)。 看來您需要使用-e
選項將消息名稱設置為要發送的“測試”。 或更改服務器以偵聽iocat使用的message
的默認消息名稱。 iocat不允許您在每次傳輸中直接指定消息名稱和消息數據,這有點奇怪。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.