这个服务器有什么问题?

时间:2017-07-31 23:19:01

标签: node.js websocket socket.io

我试图测试一个简单的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上。所以我想确保我踩到它并且没有其他任何干扰。

1 个答案:

答案 0 :(得分: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服务器通信,或者您可以使用可用于nodejs的几个webSocket模块中的任何一个将您的服务器简化为webSocket服务器。

答案的新部分,现在该问题已经演变成关于如何正确使用iocat的问题。

socket.io消息包含两部分,消息名称和消息数据。使用iocat时,您只发送数据(默认消息名称为message)。您似乎需要使用-e选项将消息名称设置为&#39; test&#39;你要发送的。或者更改服务器以侦听iocat使用的默认消息名称message。有点奇怪,iocat不允许您在每次传输时直接指定消息名称和消息数据。