2015-01-11 2 views
0

Я использую net.createServer (хост, порт) + клиент flash-сокета. Когда моя игра работает в течение нескольких часов и на большой нагрузке - сервер начинает откатывать соединения. Клиент получает «подключенное» событие и сразу после этого - событие «закрыть». Это петли типа 3-4-5-6 раз и соединяется. Сервер не находится под большой нагрузкой. Существует много ресурсов ОЗУ и ЦП.nodejs net socket начинает отбрасывать соединения при большой нагрузке

Мой код выглядит следующим образом:

var net = require("net"); 
server = net.createServer(function(socket) { 
       socket.setTimeout(15000); 
       socket.setKeepAlive(true); 
       //used to store string socket data untill packet delimiter is received 
       socket.myBuffer = ""; //(and then process the JSON message) 

       socket.on("data", onData); 
       socket.on("error", onError);    
       socket.on("end", onClientDisconnect); 
       socket.on("timeout", onClientDisconnect); 
}); 
server.listen(port); 

Как я могу отладить проблемы? Есть ли какой-нибудь код (мой), который может вызвать такую ​​вещь?

ответ

-1

Это оказалось потому, что я не проверял для записи сокет, прежде чем написать что-нибудь и becasuse. Я закрываю соединение внутри обработчика onError. Итак, что происходит: socket.write (..) запускает ошибку, потому что сокет не доступен для записи (хотя он подключен), а при ошибке я закрываю сокет, поэтому клиент начинает повторное подключение, и этот цикл выполняется в 3-7 раз до отправки без исключений.

+0

Перед тем, как писать, вам не нужно проверять возможность записи, но вам нужно проверить * результат * записи. – EJP

+0

Но это означает, что мне нужно удалить код закрытия соединения из обработчика onError, что приведет к зависанию сокетов в моем подключенном массиве клиентов. –