2016-12-12 7 views
0

反応がある初心者です。また、私はreactとsocket.ioのグループチャットを設定したいと思います。しかし、それをやろうとするといくつかの困難があります。以下は私のコードサンプルです。どんな助けもありがとう。反応は反応とSocketioで失敗しました

Server.js

const io = require('socket.io')(http) 

// Listen for a connection 
// usernames which are currently connected to the chat 
var usernames = {}; 

io.sockets.on('connection', function (socket) { 

    // when the client emits 'adduser', this listens and executes 
    socket.on('adduser', function (room) { 


     // store the room name in the socket session for this client 
     socket.room = 'room1'; 

     // send client to room 1 
     socket.join('room1'); 
     console.log("join room1 " + room) 
    }); 

    // when the client emits 'sendchat', this listens and executes 
    socket.on('sendchat', function (data) { 
     // we tell the client to execute 'updatechat' with 2 parameters 
     console.log("message " + JSON.stringify(data)) 
     // console.log(socket); 
     socket.broadcast.in('room1').emit('updatechat', data); 
    }); 


    socket.on('disconnect', function(){ 
     // remove the username from global usernames list 
     delete usernames[socket.username]; 
     // update list of users in chat, client-side 
     io.sockets.emit('updateusers', usernames); 
     // echo globally that this client has left 
     socket.broadcast.emit('updatechat', 'SERVER', socket.username + ' has disconnected'); 
     socket.leave(socket.room); 
    }); 
}) 

私が何をしたいのかClient.js

let name = "test" 
socket.emit('adduser', name); 
socket.emit("sendchat", message_text) 

    socket.on('updatechat', function (data) { 
     messages.push(data); 
     console.log("Hello!!!"); 
    }); 

チャットボードにテキストメッセージを追加することです。私はコードのような放送を試み、それを反応コンポーネントの状態として追加しました。ただし、その特定のユーザーのみがメッセージを追加できます。私のコードには何が問題なのですか?

+0

お客様のクライアントコードでは、 'socket.emit(" sendchat "、message_text)'なし ';' –

答えて

0

ここでの主な問題は、ブロードキャストを放つユーザーソケットを除くすべてのユーザーに送信するsocket.broadcast.inです。これは、一度に1つのクライアントだけがメッセージを受信することを意味します。

旧機能

// when the client emits 'sendchat', this listens and executes 
    socket.on('sendchat', function (data) { 
     // we tell the client to execute 'updatechat' with 2 parameters 
     console.log("message " + JSON.stringify(data)) 
     // console.log(socket); 
     socket.broadcast.in('room1').emit('updatechat', data); 
    }); 

新機能我々は、我々は後にしているものを達成するためにio.in('room').emit();を使用することができますメッセージを確認するために、特定のroom以内に全員を取得しようとしている例のように

socket.on('sendchat', function (data) { 
     // we tell the client to execute 'updatechat' with 2 parameters 
     console.log("message " + JSON.stringify(data)) 
     // console.log(socket); 
     io.in('room1').emit('updatechat', data); 
    }); 

+0

こんにちは、あなたの答えに感謝します。しかし、私はio.inに変更してもまだ動作していません。しかし、私がinまたはtoを使わずに放送すれば、成功を放送することができます。なぜこれが起こるのか分かりません。 –

+0

これは非常に奇妙なことです。http://socket.io/docs/#これは単独で放送することについて何も言いません。あなたが開示していない例に何かがあるかもしれませんか? –

関連する問題