У меня есть игровой сервер 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 мс перед каждой отправкой, не переписывая все это? Я сделал некоторые поисковые запросы, но я не могу найти ничего, что касается этой проблемы. Любые советы или информация, чтобы помочь в этом, были бы очень оценены, btw оптимизация скорости очень важна. Спасибо.