Как создать массив, который обновляется для подключенных клиентов с помощью socket.io - PullRequest
0 голосов
/ 05 мая 2020

Я пытаюсь отобразить имена пользователей всех подключенных клиентов в моей комнате чата, добавив их имена пользователей в массив. В настоящее время мой код просто обновит список пользователей, указав самое последнее имя пользователя, которое присоединилось, а не добавит имя пользователя в массив, что заставляет меня думать, что массив на самом деле не создается так, как я ожидал?

скрипт. js:

var items = [];
var user = user;
if (!user) {
  user = prompt('Please choose a username:');
  items.push(user);
  socket.emit('theitems', {
      items: items
});
  if (!user) {
    alert('Your name has been set to "Anonymous"');
    user = "Anonymous"
        items.push(user);
  } else {
      alert('Your name has been set to "'+ user +'"');
  } 
}
console.log(items);

socket.on('theitems', function (data) {
      $('.dispUser').html(data.items);
    });

индекс. js

server(socket('theitems', ctx => { console.log(ctx.data); ctx.io.emit('theitems', ctx.data); }));

Обновлен код, который использует сервер как «главный массив».

Этот код (+ некоторые из вышеперечисленных) решил мою проблему.

index. js (server):

var newitems = [];
server(socket('theitems', ctx => { newitems.push(ctx.data); console.log(ctx.data); ctx.io.emit('theitems', newitems); }));

script. js (client) :

socket.emit('theitems', user);

socket.on('theitems', function (data) {
      $('.dispUser').html(data);
      console.log(data);
    });

Ответы [ 2 ]

0 голосов
/ 06 мая 2020

Извините; Моя идея состоит в том, что существует массив (items []), который хранит имена пользователей клиентов, когда они присоединяются и уходят, и отображает этот массив в a, так что, когда клиенты присоединяются и уходят, их имена пользователей отображаются / удаляются, иначе говоря, раздел «Интернет-пользователи».

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

Чтобы отправить весь массив в один указанный c сокет, вы должны сделать что-то вроде этого:

socket.emit('userList', userArray);

Чтобы отправить его всем подключенным пользователям, вы бы сделали это:

io.emit('userList', userArray);

В обоих случаях клиент будет прослушивать сообщение 'userList', а затем соответствующим образом обновлять свое отображение.

socket.on('userList', userArray => {
    // refresh  the display to show the userArray
});
0 голосов
/ 06 мая 2020

Это просто, просто socket.emit('eventName', array);

Но если вы измените элементы массива, это не изменится во всех клиентах сокета и / или сервере. Вам нужно испускать новый массив каждый раз, когда этот массив изменяется. В противном случае сокеты не будут обновлять свои значения

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...