2016-12-10 5 views
1

Я пытаюсь отправить массив с сервера, который содержит все идентификаторы пользователей, когда кто-то подключается на сервере с помощью сокета io. По-видимому, излучающая часть работает нормально, но принимающая часть вообще не реагирует.Функция не работает с Socket.io

io.sockets.on('connection', 
// here's the on connection event 
function (socket) { 
    i++; 
    ids[i]=socket.id; 
    console.log("We have a new client: " + ids[i]); 
    socket.broadcast.emit('setid', ids); 
} 
/////that is the emitting part 

Теперь это приемная часть:

socket.on('setid', 
    function(ids) { 
    console.log(ids); 
} 
); 

ответ

0

Вам нужно изменить socket.broadcast.emit('setid', ids); к socket.broadcast.emit('setid', {idArr:ids}); и console.log(ids.idArr); на функцию приема.

, как кто-то спросил,

Sever

io.on('connection', 
// here's the on connection event 
function (socket) { 
    let i = 0; 
    let ids = []; 
    i++; 
    ids[i]=socket.id; 
    console.log("We have a new client: " + ids[i]); 
    socket.broadcast.emit('setid', { 
    idArr:ids 
    }); 
} 

Client

socket.on('setid', function(ids) { 
    console.log(ids.idArr); 
} 
); 

В качестве примечания, как это было не совсем ясно, здесь, используя socket.broadcast.emit должен испускать всем клиентам кроме сокет, отправляющий emit Итак, пока вы не откроете другой экземпляр клиента, он не испустит.

+0

Ваш код в порядке, покажите нам весь код клиента, пожалуйста. Вы уверены, что клиент не получает массив? – mk12ok

+0

Я обновил свой ответ @ mk12ok Собираюсь быстро создать фиктивный проект, чтобы проверить его, хотя я уверен, что это должно сработать. –

+0

Вполне нормально отправлять массив 'ids'. Ваше решение по отправке объекта '{idArr: ids}' будет работать, но почему все осложняется? – mk12ok

0

Посмотрите на следующий пример, это очень просто, только socket.io сервер и клиент socket.io-client (вы, возможно, придется запустить npm install socket.io-client первый):

Халил-server.js

const io = require('socket.io')(3001); 
var ids = []; 
io.on('connection', function (socket) { 
    'use strict'; 
    ids.push(socket.id); 
    console.log("We have a new client: " + socket.id); 
    socket.broadcast.emit('setid', ids); 
}); 
console.log('Server started at port 3001'); 

Халил -client.js

const socket = require('socket.io-client')('http://localhost:3001'); 
socket.on('setid', function (ids) { 
    console.log(ids); 
}); 

Запустите сервер с node khalil-server и как много клиентов, как вы можете с node khalil-client (вы будете должны запускать как минимум два экземпляра клиента, потому что мы используем socket.broadcast.emit). Это просто работает. Пожалуйста, покажите нам больше своего кода, и мы постараемся найти ошибку.

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