У меня есть TCP-сервер в Node.JS. Когда я получаю более 1000 пакетов в секунду, внезапно все задерживается.Сервер TCP в реальном времени в Node.JS
Не просто короткая задержка, но и задержка 3-4 секунды. Что очень плохо для моего сервера в реальном времени.
Итак, почему это происходит? Я использовал process.nextTick
при приеме и отправке пакетов, но у меня все еще есть проблема.
Возможная проблема дизайна:
Это пытается транслировать пакеты для всех соответствующих игроков в этой области. Может быть, цикл забивает обработку?
// TO BE REFACTORED
var listOffset = packet.readUInt16LE(6); // the users to broadcast to
var listSize = packet.readUInt8(listOffset);
var payload = packet.slice(10, listOffset);
// broadcast
while (listSize--) {
var userNo = packet.readUInt16LE(listOffset + 1 + (listSize * 2));
var client = Server.getConnection(userNo);
if (client) client.send(payload);
}
Соответствующие функции:
getConnection is this._connections[id]
client.send is this._socket.write(data)
Если для обработки одного пакета требуется более 1 мс, то ваш сервер не может не отставать от 1000 пакетов в секунду. Это может быть проблема? – jfriend00
@ jfriend00 возможно, учитывая, что node.js не предназначен для вычислений, пакеты дешифруются или зашифрованы (собственный аддон) по прибытии или выходу, выполняется несколько контрольных сумм. Еще несколько проверок на пакет, которые могут суммироваться до 1 мс или более. Поэтому я думаю, что 'node.js' не может справиться с этим видом использования? – majidarif
Слишком рано говорить, что это проблема, характерная для node.js. Это полностью зависит от вашего кода и того, что вы делаете с этими пакетами. Вы не включили какой-либо соответствующий код, поэтому мы не можем комментировать это. Если бы мне было поручено создать максимально возможный пакетный маршрутизатор, и скорость/масштабируемость были конечной целью, я бы, вероятно, построил его на C/C++, возможно, с некоторыми разделами кода даже в сборке вручную, поэтому вам нужно выбрать инструмент, который подходит для работы. С другой стороны, вполне возможно, что то, что делает ваш код, может быть улучшено в node.js. – jfriend00