我试图测试一个简单的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上。所以我想确保我踩到它并且没有其他任何干扰。
答案 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不允许您在每次传输时直接指定消息名称和消息数据。