У меня есть игровой сервер Java TCP, я использую java.net.ServerSocket
, и все работает просто отлично, но недавно мой провайдер провёл какое-то обновление, где, если вы очень быстро отправляете два пакета для одного и того же соединения TCP, онизакройте его силой.
Вот почему многие мои игроки случайно отключаются, когда в игре много трафика (когда есть большая вероятность, что сервер отправит 2 пакета одновременно длятот же человек)
Вот пример того, что я имею в виду: если я сделаю что-то подобное, мой провайдер без причины закроет соединение как со стороны клиента, так и со стороны сервера:
tcpOut.print("Hello.");
tcpOut.flush();
tcpOut.print("How are you?");
tcpOut.flush();
Но это будет прекрасно работать, если я сделаю что-то вроде этого:
tcpOut.print("Hello.");
tcpOut.flush();
Thread.sleep(200);
tcpOut.print("How are you?");
tcpOut.flush();
Или вот это:
tcpOut.print("Hello.");
tcpOut.print("How are you?");
tcpOut.flush();
Это началось только пару недель назад, когда они (ISP) сделали некоторыеизменения в сервисе и сети.Используя Wireshark, я заметил, что между двумя пакетами должно быть не менее ~ 150 мс для одного и того же соединения TCP, иначе он закроется.
1) Ребята, вы знаете, как это называется?у него вообще есть имя?Это законно?
Теперь я должен переписать свой игровой сервер, зная, что я использую метод под названием: send(PrintWriter out, String packetData);
2) Есть ли простое решение, чтобы попросить Java буферизоватьданные, прежде чем он отправит его клиентам?Или подождать 150 мс перед каждой отправкой без необходимости переписывать все это?Я немного погуглил, но не могу найти ничего, что решает эту проблему.Буду очень признателен за любые советы или информацию, которые могут помочь в этом. Оптимизация скорости очень важна.Спасибо.