0

クライアントのrpc呼び出しとは無関係に実行されるnode.js/socketstreamサーバー側コードをどこに/どのように実装する必要があるかを正確に理解しようとしています。簡単な例として、サーバー側で次のようなものを使用して、接続されているクライアントに定期的な時計の更新をプッシュしようとしています:

var pushTime = function() {
    d = new Date();
    ss.publish.all('newServerTime', d);
    return;
};

setInterval(pushTime, 1000);

そして、その発行イベントをサブスクライブするようにクライアントを設定すると、次のようになります。

ss.event.on('newServerTime', function(time) {
    return $('#serverTime').val(time);
});

問題: サーバー側の pushTime 関数をどこに配置/実行しますか? ドキュメントは /server/rpc ツリーを提案しているので、/server/rpc/demo.js に配置しましたが、次のエラーが発生します。

ReferenceError: ss が定義されていません

コードを export.actions ブロックに入れているわけではないことに注意してください。これはクライアント rpc 呼び出し専用だと思います。

ファイルの先頭に ss を設定してみました:

ss = require('socketstream');

しかし、それは間違いです。'publish.all' メソッドは存在しません。

ss.start 呼び出しの直後、app.js の一番下にコードを入れてみました。これもまた、publish.all メソッドが存在しないことを示しています (クライアントが接続されるまで存在しないのでしょうか?)。道に迷いました。助けていただければ幸いです。これが明確だったことを願っています。

4

2 に答える 2

1

うん、あなたはあなたの行動にそのコードを入れることができます、あなたを止めるものは何もありませんが、あなたの'app.js'ファイルにそれを置く方が良いです。

app.js(/ server / rpcアクションファイルに送信されるもの)から内部APIにアクセスするには、ss.apiを使用します

したがって、次の電話番号を呼び出す必要があります。

ss.api.publish.all()

'app.js'ファイルから。

これまで文書化されていなかったことをお詫びします。ドキュメントはまもなく更新されます。

オーウェン

于 2012-03-26T12:49:24.757 に答える
0

それがコーディング標準に準拠しているかどうかはわかりませんが、これはおそらく機能します:

/server/rpc/demo.js

exports.actions = function(req, res, ss) {
    setTimeout(function () {
        ss.publish.all("newServerTime", new Date());
    }, 1000);
}

ドキュメントを読むとき、RPC応答だけでなく、ほとんどすべてのアクションを悪用できると思います。

于 2012-03-26T12:27:06.680 に答える