Java socket output has delayed first message
我在Java中遇到了一个非常奇怪的套接字问题。这可能是因为我对插座缺乏了解,但这里是:
我正在使用套接字连接到IRC服务器。连接是完美的,我接收到IRC服务器发送给我的所有消息。当建立连接时,我对服务器进行身份验证,并启动一个单独的线程来接收服务器发送给我的内容。在那个线程中,我在连接时发送一次消息,使程序加入某个通道。
1 2 3 4 5 6 7 8 9 10 11 | boolean joined = false; while ((line = getInput().readLine()) != null) { if (!joined) { getOutput().println("JOIN #PrinZ"); getOutput().println("JOIN #Trinorae"); if (line.contains("JOIN :#prinz")) { joined = true; System.out.println("JOINED #prinz = true"); } } |
在这个方法的末尾,我调用getoutput().flush();
现在,当我试图通过我正在编写的客户机向IRCServer发送消息时,在第一条消息通过之前似乎需要很长时间。当一切都结束的时候,一切似乎都很顺利。立即处理所有以下消息。这只是我在连接并加入该频道后发送的第一条消息,需要很长时间。
我用来向服务器发送消息的方法非常简单:
1 2 3 4 |
有没有人知道为什么第一条消息要花这么长时间才能传输到服务器,而下面的一切(在第一条消息最终到达之后)都进展顺利?
如果值得一提的话:我正在为我的servlets使用tomcat6,在这个servlets上我建立了连接,而作为irc服务器使用了一个未实现的tomcat6。消息通过Ajax发送到servlet。(但发送到服务器的过程似乎很顺利,因为发送消息时所执行的系统输出会立即打印在Tomcat日志中,因此延迟在套接字或IRC服务器中。)
如果需要更多的信息,我会尽力提供,因为这看起来很复杂。
每次执行while循环时,您的代码似乎都会发送
这意味着您最终将发送这些
相反,您应该只发送一次
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | boolean sent_join = false; boolean joined = false; while ((line = getInput().readLine()) != null) { if (!sent_join) { getOutput().println("JOIN #PrinZ"); getOutput().println("JOIN #Trinorae"); sent_join = true; } if (line.contains("JOIN :#prinz")) { System.out.println("JOINED #prinz = true"); joined = true; } } |
请注意,注册后才能发送
注意,