Node.jsを介して2つのクライアントをsocket.ioで接続します
質問
Socket.ioを介して2人のクライアント(プレイヤー)に互いに連絡を取らせようとしています(たとえば文字列を交換します)。このコードはクライアントにあります(GameIDはコードで定義されています):
var chat = io.connect('http://localhost/play');
chat.emit(gameId+"", {
guess: "ciao"
});
chat.on(gameId+"", function (data) {
alert(data.guess);
});
サーバー上に私はこれを持っています(これは私が最初に行うことの1つであり、もちろんルーティングではありません)
var messageExchange = io
.of('/play')
.on('connection', function (socket) {
socket.emit('message', {
test: 'mex'
});
});
基本的にチャンネルを作成し、ユーザーが接続するとチャンネルを使用して、両者だけが読むことができる王の「GameID」のメッセージを交換します( on.(gameId+"" ...
もの。私の問題は、プレイヤーが接続すると(最初の1つ、次にもう一方)、最初の接続されたものが受信したデータに警告する必要があることです(接続された2番目のデータがメッセージを放出したため)。なぜこれが起こっていないのか知っている人はいますか?
ありがとう。
解決
socket.ioサーバーは中間者のように動作する必要があります。クライアントからメッセージを受信し、クライアントにメッセージを送信できます。クライアントから他のクライアントへのサーバーリレーメッセージがない限り、デフォルトでは「チャネル」として機能しません。
彼らのウェブサイトには一般的な用途に関する多くの良い情報があります、 http://socket.io そして彼らのレポ https://github.com/learnboost/socket.io
チャットクライアントの簡単な例は、次のようなものかもしれません:
var chat = io.connect("/play");
var channel = "ciao";
// When we connect to the server, join channel "ciao"
chat.on("connect", function () {
chat.emit("joinChannel", {
channel: channel
});
});
// When we receive a message from the server, alert it
// But only if they're in our channel
chat.on("message", function (data) {
if (data.channel == channel) {
alert(data.message);
}
});
// Send a message!
chat.emit("message", { message: "hola" });
サーバーは次のように動作する可能性がありますが、
var messageExchange = io
.of('/play')
.on('connection', function (socket) {
// Set the initial channel for the socket
// Just like you set the property of any
// other object in javascript
socket.channel = "";
// When the client joins a channel, save it to the socket
socket.on("joinChannel", function (data) {
socket.channel = data.channel;
});
// When the client sends a message...
socket.on("message", function (data) {
// ...emit a "message" event to every other socket
socket.broadcast.emit("message", {
channel: socket.channel,
message: data.message
});
});
});
所属していません StackOverflow