2016-12-12 3 views
0

Я новичок с реакцией. И я хочу настроить групповой чат с помощью реакции и 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. Который испускает всех, но пользовательский сокет, излучающий широковещательную передачу, что, в свою очередь, означает, что только один из клиентов получит сообщение за раз.

Старый функция

// 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('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); 
    }); 

Как и в примере мы пытаемся получить все в пределах конкретного room, чтобы увидеть сообщение, которое мы можем использовать io.in('room').emit();, чтобы добиться того, что мы после ,

+0

Привет, спасибо за ваши ответы. Но я изменился на io.in все еще не работает. Тем не менее, если я только транслирую без участия или в, это может привести к успеху трансляции. Я не знаю, почему это происходит? –

+0

Это очень странно, http://socket.io/docs/# это ничего не говорит о простом эфире. Может быть, что-то есть в примере, который вы не раскрыли? –

Смежные вопросы