【问题标题】:what's wrong with this server?这台服务器有什么问题?
【发布时间】:2017-08-01 08:29:48
【问题描述】:

我正在尝试测试一个简单的 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 命令启动它,并禁用了这台机器上运行的所有网络服务器。

这行得通。服务器对连接和断开事件响应正常,但对“测试”消息没有响应:

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 上。所以我想确保我踩到它,没有其他任何干扰。

【问题讨论】:

  • 服务器没有问题。正如我在下面修改后的答案所解释的那样,您的客户端发送的消息名称为 message,而不是 test,因此您的服务器永远不会看到它。

标签: node.js websocket socket.io


【解决方案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 选项将消息名称设置为您要发送的“测试”。或者更改您的服务器以侦听 iocat 使用的默认消息名称 message。 iocat 不允许你在每次传输时直接指定消息名称和消息数据,这有点奇怪。

【讨论】:

  • 当您回答时,我正在编辑问题。我现在用了iocat,支持socket.io,但是也不行。
  • @NelsonTeixeira - 我对iocat 一无所知 - 我使用库作者编写的真实socket.io 客户端,没有遇到这样的困难。我知道使用常规的 socket.io 库,连接 URL 上有各种查询参数,它们是初始连接建立的一部分。你有什么理由不使用实际的 socket.io 客户端库为自己编写一个 10 行的 socket.io 客户端?您可以为浏览器或 node.js 应用程序创建一个。当我想测试事物时,这就是我所做的。那么,你不是在调试/拥有 iocat。
  • 我想要一个命令行测试的原因是因为我想在 Apache 代理、子 url 和 https 后面使用它,并且想在命令行中测试各种配置,这样我就可以进行婴儿步了在上面。 :)
  • @NelsonTeixeira - 好吧,你的问题并不是关于 socket.io。那就是关于如何正确使用iocat。您的服务器没有问题(根据您的问题的标题)。问题是你如何正确地使用 iocat 来做你想做的事。那个我帮不了你。我回答了问题,就像我提交答案时一样。你现在已经把问题引向了我无法帮助的方向。你要么自己调试,要么找个知道 iocat 的人。
猜你喜欢
  • 2012-10-07
  • 1970-01-01
  • 2017-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-15
  • 2010-12-11
  • 1970-01-01
相关资源
最近更新 更多