【问题标题】:Send message from server to client with dnode使用 dnode 从服务器向客户端发送消息
【发布时间】:2012-05-05 12:26:28
【问题描述】:

几个月前,我发现了 nowjs 和 dnode,最后使用 nowjs(和 https://github.com/Flotype/nowclient)进行客户端/服务器双向通信。

nowclient 在 2 个节点进程之间启用 nowjs 通信(而不是在一个节点进程和一个开箱即用的 nowjs 浏览器之间)。然后,我能够将数据从客户端发送到服务器,然后从服务器发送到客户端。我现在用的是node 0.6.12,用node 0.4.x运行客户端有点痛苦。

我正在仔细研究 dnode,但我不确定服务器与客户端的通信是如何工作的。服务器是否有可能向客户端发送直接消息?这个想法是让客户端在服务器上注册(在第一次连接时),并让服务器在需要时联系客户端。

据我了解,如果客户端首先从服务器请求某些内容,则可以在服务器上调用方法。对吗?

【问题讨论】:

    标签: javascript node.js nowjs-sockets dnode


    【解决方案1】:

    dnode 使用对称协议,因此任何一方都可以定义对方可以调用的函数。您可以采用 2 种基本方法。

    第一种方式是在服务端定义一个注册函数,并从客户端传入一个回调。

    服务器:

    var dnode = require('dnode');
    
    dnode(function (remote, conn) {
        this.register = function (cb) {
            // now just call `cb` whenever you like!
            // you can call cb() with whichever arguments you like,
            // including other callbacks!
    
            setTimeout(function () {
                cb(55);
            }, 1337);
        };
    }).listen(5000)
    

    客户:

    var dnode = require('dnode');
    
    dnode.connect('localhost', 5000, function (remote, conn) {
        remote.register(function (x) {
            console.log('the server called me back with x=' + x);
        });
    });
    

    或者,一旦方法交换完成,您可以直接从服务器以对称方式调用客户端:

    服务器:

    var dnode = require('dnode');
    
    dnode(function (remote, conn) {
        conn.on('ready', function () {
            remote.foo(55);
        });
    }).listen(5000);
    

    客户:

    var dnode = require('dnode');
    dnode(function (remote, conn) {
        this.foo = function (n) {
            console.log('the server called me back with n=' + n);
        };
    }).connect('localhost', 5000);
    

    【讨论】:

    • 感谢您的澄清。客户端可以连接到服务器并等待来自服务器的来电吗?另外,有没有可以使用服务器端的客户端标识符?
    • 我使用 conn.id 和 remote 来跟踪客户。这真的很棒。
    • 刚刚意识到这个答案来自他自己的子堆栈。
    • 是的,他摇滚!我试图弄清楚如何使用 udp 流来实现这一点,但这些事件发生在初始加载之后。似乎所有示例都是针对首次加载时发生的通信(d.on())。你们中的任何人都知道如何为后续活动执行此操作吗?
    猜你喜欢
    • 2017-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-05
    • 2017-07-30
    • 1970-01-01
    相关资源
    最近更新 更多