#node.js #sockets #websocket #socket.io #ubuntu-18.04
#node.js #сокеты #websocket #socket.io #ubuntu-18.04
Вопрос:
Я несколько раз пытался масштабировать свое приложение для чата с помощью socket.io
. Я столкнулся с какой-то стеной при попытке установить более 2 тыс. подключений к веб-сокетам на одном компьютере. Это число кажется немного низким, учитывая, что на моем локальном компьютере установлено 8 ядер с оперативной памятью объемом 6 ГБ, и во время теста используется только половина оперативной памяти и центрального процессора. Будучи новичком в веб-сокете и Linux, я, возможно, не совсем правильно настроил свой сервер, поэтому я увеличил максимальное количество открытых файлов до 500000 и максимальное количество открытых сокетов (maxconn) до 60000 без какого-либо эффекта.
Итак, мои вопросы:-
- Как это повлияет на производительность сервера?
- Сколько еще запросов в секунду это вызовет на моем сервере?
- Существует ли ограничение на количество подключений, которые могут быть созданы локально с помощью
socket.io
? - Сколько одновременных подключений вам удалось установить на одном компьютере с помощью такого рода настроек?
- Есть ли какие-либо другие настройки Linux, которые нужно настроить для повышения производительности?
В настоящее время я использую Ubuntu 18.04
и мое приложение в node.js
.
Комментарии:
1. Вы получаете сообщение об ошибке относительно того, что здесь происходит? Возможно, у вас закончились файловые дескрипторы, но это также может означать, что открытие тысяч tcp-сокетов перегружает ваш маршрутизатор. Работает ли тот же код на localhost? Как насчет локальной сети?
2. Очень сложно найти решение вашей проблемы, используя только эту информацию. Я бы рекомендовал установить средство мониторинга на вашем экземпляре. Есть хороший шанс, что вы поймаете какое-то странное поведение таким образом. У меня был хороший опыт использования github.com/netdata/netdata
3. Начните с рефакторинга вашего кода. Например, удалите функции ‘Sync’ (т. Е. readFileSync) и замените их кодом обратного вызова. И используйте Async / Await. Тогда вы начнете видеть, как подключаются другие ядра.
4. @gergelykalman на локальном хостинге все работает нормально. Но нужно знать о сервере.
5. @ofirule Спасибо. Я установлю и дам вам знать.