2011-10-24 9 views
-1

WebSocketアプリケーションをsocketioで書いています。私が実装できる2つのソケットイベントは、接続時とメッセージ時にあります。最初のものはパラメータ(クライアント)としてソケットを受け取り、2番目はクライアントから送信されたデータを受け取ります。だから私はそれにメッセージイベント上でソケット変数を使用するには、この方法を記述することができます。より広い範囲からJavascript変数を使用する方法

WebSocketNoaListener.onClientConnect = function(socket){ 
var soc = socket; 
socket.on("message", function(msg){ 
     console.log("i can use message: "+msg); 
     console.log("and the socket: "+soc.id); 
    }); 
socket.on("disconnect", WebSocketNoaListener.onClientDisconnect); 
} 

が、私は読みやすくするための私の機能を分離したい:

WebSocketNoaListener.onClientConnect = function(socket){ 
var soc = socket; 
socket.on("message", WebSocketNoaListener.onClientMessage); 
socket.on("disconnect", WebSocketNoaListener.onClientDisconnect); 
} 


WebSocketNoaListener.onClientMessage = function(){... 

私はsoc変数を使用する必要がありますsocketを受け取る関数の外側のスコープ内にあります。それは可能ですか?

+0

「アウトスコープ」とはどういう意味ですか? – JaredPar

+0

@JaredPar私は上記の場合、あなたが正しい原因であることがわかりましたが、グローバルソケット変数は、イベントに属する正しいソケットインスタンスを指し示すことはありません。 "Outerscope" – dlamblin

答えて

1

グローバルスペースを汚染する代わりに、実際にこのようなことを行う必要があります(さらに、2つの他の答えで与えられた解決策は、接続ごとにsocがオーバーライドされるため2つの同時接続を処理できません)。

WebSocketNoaListener.onClientMessage = function(soc, msg){ 
    console.log("i can use message: " + msg); 
    console.log("and the socket: " + soc.id); 
}; 
WebSocketNoaListener.onClientDisconnect = function(soc, event){ 
    console.log("not implemented in question"); 
}; 
WebSocketNoaListener.onClientConnect = function(socket){ 
    socket.on("message", WebSocketNoaListener.onClientMessage.bind(this, socket)); 
    socket.on("disconnect", WebSocketNoaListener.onClientDisconnect.bind(this, socket)); 
} 
+0

上記のケースは私の質問に答えるが、私の問題は解決しない。 "この"スコープはソケット自体を示していますので、あなたの答えは正しい解決策です。 – eyurdakul

1

socをonClientConnection関数の外部に初期化します。

var soc; 

WebSocketNoaListener.onClientConnect = function(socket){ 
    soc = socket; 
    socket.on("message", WebSocketNoaListener.onClientMessage); 
    socket.on("disconnect", WebSocketNoaListener.onClientDisconnect); 
} 

socは、onClientConnectの外部からアクセスできるようになりました。

-2

ここでは、websocket固有の究極の回答です。

WebSocketNoaListener.onClientConnect = function(socket){ 
    var soc = socket; 
    socket.on("message", WebSocketNoaListener.onClientMessage); 
    socket.on("disconnect", WebSocketNoaListener.onClientDisconnect); 
} 

WebSocketNoaListener.onClientMessage = function(msg){ 
    console.log("this is the message "+msg); 
    console.log("and this is the id of the socket "+this.id); 
    //'this' points here the socket itself 
} 
+0

そして、なぜ、そして最初の場所で何が間違っていたかについての反省はありません。 – dlamblin

+0

私の答えがあなたの質問のポイントを完全に見逃してしまったのなら、ごめんなさい。私はそれを削除しました。 http://stackoverflow.com/posts/7878346/revisions – dlamblin

関連する問題