0

私はdノードを使用します

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');

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(); });

@ server は評価されません。

何故ですか?

もちろん、おそらく client->server->client コールバック メソッドを使用して回避できますが、可能であれば、将来の作業のために単純な方法が必要です。

ありがとう。

4

1 に答える 1

0

私は十分に単純な答えを見つけました.TCPソケットコールバックでdnode d.onイベント定義を生成するのは悪い考えです.dnodeがトリガーされる前にまだそこにないためです。

于 2013-08-05T16:24:55.657 に答える