Сбой сервера: асинхронный Node.js socket.io?

У меня есть такой код:

 if (players[j].socket){
  players[j].socket.emit("bla");
  players[j].socket.emit("bla");
 }

второй испускает аварийный сервер, потому что:

TypeError: Cannot read property 'emit' of null

Но как это возможно, что второй испускает аварийный сервер? В первом сокете emit не ноль, а во втором -? Я думаю, что для второго эмитента player [j] имеет другое значение, потому что массив player был изменен.

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

Возможно ли в моем коде, что игроки [j] в моей первой строке отличаются от второй строки?

Обновлено: у некоторых игроков свойство socket null, потому что они боты.

Edit2: также эта проблема началась после того, как я внедрил ботов.

Как / где вы сконструируете свой players? Очевидно, что к моменту выполнения второй строки players[j] будет нулевым.

Moshe Shmukler 30.10.2018 17:15

Вы закрывали сокет в какой-либо части вашего кода?

Mat 30.10.2018 17:21

Просто добавьте точку останова для отладки. console.info(j, players[j].socket); players[j].socket.emit("bla"); console.info(j, players[j].socket); players[j].socket.emit("bla");

hoangdv 30.10.2018 17:25

Я столкнулся с подобными вещами ... Имейте в виду, что Javascript не копирует объекты глубоко ...;) Это может означать, что когда вы добавляете соединения в массив, вы фактически не захватываете все это . Я переключился на запрос класса веб-сокета для текущих подключений и добавляю к ним _id, когда они запускаются, чтобы я мог отличить одно от другого.

David Hoelzer 30.10.2018 18:04

Ошибки такого типа действительно легко отлаживать и тестировать, пожалуйста, запишите в консоль свой j, player [j], и player перед этой строкой, и вы увидите все, а оттуда увидите, какая из них «очищается». Затем переверните код и найдите его

noitse 30.10.2018 18:05

Player [j] .socket имеет значение NULL во второй строке, вероятно, потому, что его бот по умолчанию имеет нулевое значение

aqzaqzaqz 30.10.2018 18:06

Моше Шмуклер: вы имеете в виду, что player [j] .socket имеет значение null?

aqzaqzaqz 30.10.2018 18:13

Я уже изменил свой код на сервере (я chache player [j]). мой вопрос: возможно ли, что player [j] .socket в первой строке отличается от второй строки. потому что, если я прав, это невозможно

aqzaqzaqz 30.10.2018 18:28

Если у вас есть боты и игроки, почему бы не кэшировать их в двух разных местах. Я предполагаю, что с добавлением или удалением бота / игрока происходит что-то странное. Кстати, я бы порекомендовал вам использовать socketRooms вместо того, чтобы сохранять их в массивах. Вы сможете излучать всю группу и иметь возможность горизонтального масштабирования в будущем.

noitse 31.10.2018 07:19
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
9
94
0

Другие вопросы по теме