У меня есть приложение чата, работающее на Node JS express с Socket io.
Раньше клиенты отключались, когда отправляли большую картинку размером более 4 МБ, я обнаружил, что сокет io не может обрабатывать / передавать / отправлять такие большие данные в Base64 через события выброса сокетов. В итоге я использовал модуль загрузки файлов Socket IO .
Теперь я использую модуль загрузки файлов Socket io, чтобы пользователи могли загружать фото / файлы во время чатов. Теперь, даже если я загружаю самые большие изображения / файлы, чат не отключается.
Однако клиенты по-прежнему случайным образом отключаются из-за многих ошибок, таких как тайм-аут пинга, закрытие транспорта и т. Д., Даже если они просто ведут текстовый чат.
Ниже приведены настройки клиента и сервера сокета io, я пытался поиграться со значениями pingTimeout и pingInterval, но клиенты по-прежнему отключаются.
Конфигурации клиента Socket IO:
Конфигурации Socket IO-сервера:
Журналы JS на стороне клиента при отключении чата:
Версия моего клиента и сервера Socket io:
Схожая проблема, но безуспешно пытаясь найти какое-либо решение: https://github.com/socketio/socket.io/issues/2769
Мое приложение использует около 500-800 одновременно работающих клиентов.
Мой сервер Спецификации, где развернуто приложение:
- 32 ГБ ОЗУ, 8 виртуальных ЦП, Ubuntu Lemp 16.04, Node ver 8.9.3
Мои вопросы:
- Какими должны быть оптимальные конфигурации моего сокета-клиента и сервера, такие как pingTimeout, pingInterval и т. Д., Для устранения проблем случайного отключения?
- Нужно ли мне обновлять спецификации сервера для размещения такого трафика? Если да, то сколько и что мне обновить?
- Может ли это быть причиной того, что когда многие пользователи загружают файлы с помощью модуля загрузки файлов Socket IO, это приводит к тому, что серверу Socket IO не хватает памяти, что приводит к отключению других клиентов? Как я могу предотвратить это?