【问题标题】:Non-event-driven socket module for Node.jsNode.js 的非事件驱动套接字模块
【发布时间】:2016-02-23 09:50:34
【问题描述】:

我已经使用 Socket.io 使用 Node.js 创建了一个服务器,现在我需要让 Python 客户端连接到它。

困扰我的是理解 Socket.io 中的“关键字”如何影响这个连接。例如,它最初是在服务器端完成的:

io.on('connection', function(socket){

  socket.on('request', function(msg){
     console.log(msg);
  });
});

这意味着 Python 客户端必须执行类似的操作(如果我要在终端中将其作为脚本运行):

establishConnection 12.12.12.12:3000 'connection'
//connection established ...
sendData('request', {data : 'hello'});

这不是可取的,我需要修改服务器以接受没有关键字的套接字请求,像这样

establishConnection 12.12.12.12:3000
//connection established ...
sendData({data : 'hello'});

这可能与 Socket.io 相关吗?

【问题讨论】:

  • 好吧 node.js 不是 python,但这并不意味着它比 python 更复杂,一旦你理解它为什么使用回调并且伪代码看起来很简单,我怀疑这样的东西可以工作。您可以通过定义带参数的函数来简化应用程序,只需将名称定义为应该使用它的位置的参数。看看这个callbackhell.com
  • @GeoPhoenix 我应该指出,如果您在终端中运行脚本,“伪代码”实际上只是您要执行的东西。另外,我的问题与回调无关。我需要能够在不使用 Socket.io 中的事件“关键字”的情况下通过套接字进行连接,如果您有任何其他模块可以让我这样做而不是 Socket.io,我会很乐意看看它。跨度>

标签: python node.js sockets socket.io


【解决方案1】:

在 api 中没有办法从 socket.io 库中获取所有包。

要从 socket.io 获取所有数据包,您可以做一个丑陋的 hack 并覆盖 socketoneventonpacket

像这样:

socket.onevent = function () {
    console.log(arguments);
}

{ '0': { type: 2, nsp: '/', data: ['chat message', 'hei' ] } }

请注意,这是未记录且不受支持的,因此 API 很可能会中断。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-04
    • 1970-01-01
    相关资源
    最近更新 更多