2012-03-26 5 views
0

クライアントrpc呼び出しとは独立して動作するnode.js/socketstreamサーバー側のコードを実装する場所と方法を正確に理解しようとしています。Socketstream(0.3)サーバー側のコードの混乱

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関数はどこに配置/実行しますか?ドキュメントは/サーバー/ rpcのツリーを示唆ので、私は/server/rpc/demo.jsにそれを置くが、それはこのエラーを得られます。

にReferenceError:SSが

マインドあなたを定義されていない、私は入れていませんよexport.actionsブロック内のコード。私はそれがクライアントのRPC呼び出しのためだけだと考えています。

私は、ファイルの先頭にSSを設定してみました:

ss = require('socketstream'); 

が、それはお奨めは間違っているのです - 今「publish.all」メソッドは存在しません。

ss.start呼び出しの直後に、app.jsの最後にコードを挿入しようとしました。もう一度、publish.allメソッドは存在しません(クライアントが接続されるまではないかもしれません)。道に迷いました。どんな助けもありがたい。これがはっきりしたことを願う

答えて

1

あなたはあなたの行動にそのコードを入れることができますが、あなたを止めることはできませんが、あなたのapp.jsファイルに入れる方がよいでしょう。 app.js(/サーバー/ rpcのアクションファイルを介して送信されています1)から内部APIにアクセスするには

したがって、あなたが呼び出す必要がありますss.api

を使用します。

ss.api.publish.all() 

からあなたの 'app.js'ファイル

お詫び申し訳ありません。私はすぐにドキュメントを更新します。

オーウェン

+0

Owenに感謝します。私は答えがこのようなものであることを期待していました。おそらく間違ったフォローアップ - 私はcoffeescriptでプロジェクトに取り掛かるつもりだと思う。 app.jsは明らかにss cs <> js link/compile ecosystemの外にあります。推奨されるワークフロー私はちょうどサーバーのAPIツリー内に別のモジュールを構築して、何とかそれを必要とするでしょうか? – jlabrie

+0

こんにちは。確かにそれを(私は)行うことができます、またはapp.coffeeにapp.jsを変更し、 'コーヒーapp.coffee'であなたのアプリを起動します。個人的に私は最初の選択肢を好みます。 – socketstream

0

それがコーディング標準に準拠しているかどうかを知るが、これはおそらく動作しますしないでください。

/server/rpc/demo.js

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

私はあなたができると思うのドキュメントを読んでRPCレスポンスだけでなく、すべてのもののためのアクションを乱用する。

+0

ありがとうございます。これは、私が前に提示したテストケースを表現する(はるかに)クリーンな方法です。それでもSSエコシステムのサーバー側コードのホームと実行パスが適切であることに疑問を抱かせていました。これは私の真の関心事です。クライアントから独立したゲームタイミングとロジックが必要です。 。 。 – jlabrie