簡體   English   中英

這台服務器怎么了?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM