繁体   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