ソケット接続時に追加データを最適に送信するにはどうすればよいですか?
クライアント:
socket.on('connect',function(){
//I'd like set some values and pass them up to the node server.
});
Node.jsサーバー:
io.on('connection', function(client){
//I'd like to get the data here.
});
たとえば、ユーザー名やメールアドレスなどを送信します。
接続または作成時にデータを送信する必要があります。
var s = io('http://216.157.91.131:8080/', { query: "foo=bar" });
s.connect();
var c = io.connect('http://216.157.91.131:8080/', { query: "foo=bar" });
socket.ioの新しいバージョン を使用すると、サーバー上で物事が変更されます。
var io = require('socket.io')(server);
io.use(function(socket, next) {
var handshakeData = socket.request;
console.log("middleware:", handshakeData._query['foo']);
next();
});
私は別のアプローチを持っています-接続した直後にデータでイベントを発行します:
socket.on('connect',function(){
// Send ehlo event right after connect:
socket.emit('ehlo', data);
});
io.on('connection', function(client){
// Receive ehlo event with data:
client.on('ehlo', function(data) {
});
});
変数/オブジェクトを保持できます。たとえば、データを持つehlo
イベントがない場合、ehlo
が送信されるまで他のイベントは無視されます。
これが満たされない場合、接続時にデータをすぐに送信できます。コードをコピーすることはありませんが、この答えは次のとおりです。 https://stackoverflow.com/a/13940399/1948292
connection
イベントは、TCP接続が確立されるとすぐに発生します。間に何かを送信する方法はありません。
できることは、サーバーから送信された最初のメッセージを取得し、そのメッセージにデータを入れるだけです。このためにいくつかのシンプロトコルをロールすることを強くお勧めします。そのため、複数のタイプのメッセージがあり、それらを使用してコードがデータを処理する方法を決定します。
汎用アーキテクチャを思い付くのはかなり簡単なので、これも拡張性が高いでしょう。 userdata
が最初に来るのを待ちたい場合は、接続に状態を追加するだけです。
クエリデータをnodejsおよびserver.ioサーバークライアントに送信するためのこのコード
var socket = io.connect(window.location.Origin,{query:'loggeduser=user1'});
io.sockets.on('connection', function (socket) {
var endp = socket.manager.handshaken[socket.id].address;
console.log("query... " + socket.manager.handshaken[socket.id].query.user);
});
クエリ... user1
この点で、ここにある答えが本当に役立つことがわかりました: socket.ioにhandshakeDataと共にカスタムデータを送信します
また、次のドキュメントをブラッシュアップすると、接続中にソケットオブジェクトからアクセスできるハンドシェイクオブジェクトに変数を関連付ける方法を説明できます。 https://github.com/LearnBoost/socket.io/wiki/Authorizing #global-authorization
これはソケットバージョン2.1.1の私のコードです
//client side
var socket = io.connect(window.location.Origin,{query:'loggeduser=user1'});
// server side
io.socket.on('connection', function (socket) {
console.log("loggeduser => " + socket.handshake.query.loggeduser);
});