【问题标题】:Socket.IO: Invoke custom function instead of using socket.onSocket.IO:调用自定义函数而不是使用 socket.on
【发布时间】:2011-11-14 21:13:54
【问题描述】:

有没有一种方法可以定义一个自定义的function (name,data,callback),然后在客户端发送函数调用时由 socket.io 调用?

而不是使用socket.on(name,function(data,callback){...})socket.io 应该调用我的函数。这将使实现每个 socket.io 函数所需的逻辑变得更加容易,并且我不需要为每个连接上的整个 rpc 函数堆栈调用 socket.on

我检查了 socket.io wiki,但没有找到任何相关内容。

我知道我可以像这样在 socket.io 之上实现一个“rpc 服务器”,但最好使用 socket.io 的原生方式。

socket.on('rpc',function(data,callback){ /* e.g. data.name for function name, data.data for the actual data */});

【问题讨论】:

    标签: socket.io


    【解决方案1】:

    不确定我是否得到它。你不能这样做吗?

    服务器:

    function handleMessage(name, data, callback) {
      // ...
    }
    
    // listen on all kind of messages
    socket.on('message', handleMessage);
    

    客户:

    socket.send(name, data, callback);
    

    这样你只需使用 Socket.IO 作为 WebSockets 包装器。

    如果您正在寻找更花哨的东西,也许您应该查看nowjsdnode

    【讨论】:

    • socket.send 只支持 2 个参数:数据和回调。然而回调是错误的(在这里提交错误报告:github.com/LearnBoost/socket.io/issues/645)。我实际上正在按照您现在的建议进行操作(带有错误修复)。我用socket.json.send([name,data],cb) 发送。 (json 消息标志)
    • 嗯,也许send 不应该有回调,我不确定。暂时您可以随时恢复为emit,因为无论如何您只会有一个绑定,并且将来很容易更改它。除了美观之外,还有什么不使用emit 的原因吗?
    • ??? 服务器端的handleMessage()函数怎么能客户端调用callback?????
    猜你喜欢
    • 2018-08-27
    • 1970-01-01
    • 2019-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-14
    • 1970-01-01
    • 2020-12-27
    相关资源
    最近更新 更多