0

我使用 dnode

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

并了解

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

正如@substack 作者回复的那样。

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

服务器.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');

客户端.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'); });

@client 被评估。

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

@server 永远不会被评估。

这是为什么?

当然,也许我可以使用客户端->服务器->客户端回调方法来解决问题,但如果可能的话,我只想为我未来的工作提供一种直接的方式。

谢谢。

4

1 回答 1

0

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

于 2013-08-05T16:24:55.657 回答