2016-07-03 15 views
-3

私は同じブラウザでゲームをプレイするために新しいソケットイベントハンドラを作成しようとしています。同じユーザースクリプトがインストールされているプレイヤー間でデータを送信できます。クライアント側からソケットを追加する

ゲームはsocket.ioを使用し、ここで私はこれまで何をやったかだ:私はこのように、ユーザ側socket.onハンドラを追加しました:

game.socket.on("hello", function() { console.log("hello there") }) 

私は、接続された2人のプレーヤーでこれをしませんでした私はこれを行う際に同じゲームに、しかし:EMITを送っ

game.socket.emit("hello") 

唯一のプレーヤーはhello thereはログアウトします。

私の推測によれば、サーバー側には、名前がhelloのイベントを発行するハンドラはありません。サーバーサイドのコードにアクセスすることなく追加できますか、それを回避して他のプレイヤーに直接データを送信する方法はありますか?

+0

コードの文脈を大きくする必要があります。 'game.socket.emit(" hello ")'は1つのソケットエンドポイントにのみメッセージを送ります。エンドポイントがサーバーで、サーバーがそのメッセージを他のユーザーに送信することを期待している場合は、サーバーにコードを追加してそのメッセージを受信し、受信時に他のプレーヤーに送信する必要があります。 socket.ioはクライアントとサーバーの接続です。あるクライアントからsocket.io(またはwebsocket)内の別のクライアントに直接送信することはできません。代わりに、サーバーに送信して、サーバーにそれを他のクライアントに転送させる必要があります。 – jfriend00

+0

答えをありがとう、それは私が考えたものだ – MarksCode

答えて

1

私は少しを追加し、答えに私のコメントを向けるだろう。

socket.io接続は、クライアントとサーバー間の接続です。クライアントからは、その接続でできることはすべてサーバーに送信されます。したがって、game.socket.emit("hello")は、サーバーにのみメッセージを送信します。

サーバーがそのメッセージを他のユーザーに送信するようにするには、サーバーにコードを追加してそのメッセージを受信し、受信時に他のプレーヤーに送信する必要があります。 socket.ioはクライアントとサーバーの接続です。

socket.io(またはsocket.ioが基づいているwebsocket)では、あるクライアントから別のクライアントに直接送信することはできません。代わりに、サーバーに送信して、サーバーにそれを他のクライアントに転送させる必要があります。

+0

素敵な答え、非常に明確 – TommyLike

1

Socket.ioが部屋check)を導入している、あなたがクライアントからメッセージを送信し、すべての部屋のメンバーにこのメッセージを発するように、サーバー側を使用することができ、あなたの部屋番号を考慮すると、room_oneですクライアント:

var socket = io(); 
socket.on('connect',function(){  
     socket.emit('join','room_one'); 
     socket.emit('room_message',{hello:'hello'}); 
}); 
socket.on('room_message',function(data){ 
     console.log(data); 
}) 

サーバー:

io.sockets.on('connection',function(socket){  
    socket.on('join',function(room){ 
     socket.join(room); 
    }); 
    socket.on('room_message', function(data) {   
     io.to('room_one').emit('room_message',{world:'world'}); 
    }); 
}); 

これは役に立ちます。

関連する問題