【问题标题】:dnode server->client direct call possible? node.jsdnode服务器->客户端直接调用可能吗?节点.js
【发布时间】:2013-08-05 09:27:03
【问题描述】:

我使用 dnode

我已阅读 StackOverflow:Send message from server to client with dnode

了解一下

dnode 使用对称协议,因此任何一方都可以定义对方可以调用的函数。

作者回复@substack。

所以,现在,我有如下代码:

server.js

var HTTPserver = httpServer('/www')
            .listen(9999, function()
            {
                console.log('HTTP listening 9999');
            });

        var dnode = require('dnode');

        var shoe = require('shoe')(
            function(stream)
            {
                var TCPserver = require('net')
                    .createServer()
                    .listen(5005, function()
                    {
                        console.log('TCP listening 5005');
                    })
                    .on('connection', function(socket)
                    {
                        console.log('TCPsocket connected');
                        var d = dnode(
                        {
                        });
                        d.on('remote', function(remote)
                        {
                            remote.test();
                        });
                        d
                            .pipe(stream)
                            .pipe(d);

                        socket.end();
                    })
                    .on('end', function()
                    {
                        console.log('TCPsocket  disconnected');
                    });

            })
            .install(HTTPserver, '/dnode');

client.js

var shoe = require('shoe');
        var stream = shoe('/dnode');
        var dnode = require('dnode');
        var d = dnode(
        {
            test: function()
            {
                console.log('hello');
            }
        });
        d.on('remote', function(remote)
        {
            console.log('connnected');
        });
        d.pipe(stream)
            .pipe(d);

基本上,我想调用从服务器发起的function:test -> hello

但是,我看到的结果是

d.on('remote', function(remote) { console.log('connnected'); });

@客户端被评估。

d.on('remote', function(remote) { remote.test(); });

@服务器永远不会被评估。

这是为什么呢?

当然,也许我可以使用 client->server->client 回调方法来解决问题,但如果可能的话,我只想为我未来的工作提供直接的方法。

谢谢。

【问题讨论】:

    标签: javascript node.js dnode


    【解决方案1】:

    我找到了足够简单的答案,在 TCP 套接字回调中生成 dnode d.on 事件定义是个坏主意,因为在应该触发 dnode 之前还没有东西。

    【讨论】:

      猜你喜欢
      • 2016-06-20
      • 2014-02-13
      • 2015-12-05
      • 1970-01-01
      • 2020-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多