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