我已经在Lua中编写了一个插件,用于通过UDP数据包(512字节)将播放器信息发送到远程服务器的游戏,远程服务器从数据包中读取数据并将所有播放器信息汇总一个xml文件(然后所有玩家都可以在网页上查看它们,以便他们可以看到彼此的当前状态)。DatagramSocket暂时停止接收数据包(Java)
我已经使用DatagramSocket编程服务器在Java中处理传入的数据包,但我注意到一些奇怪的行为。经过一段时间后,DatagramSocket似乎暂时停止接受连接约10-12秒,然后再次恢复正常行为(我不能看到任何异常)。客户端发送数据包的频率与发生此行为的速度之间肯定存在关系。如果我增加客户端的更新频率,DatagramSocket将会“尽快”失败。
值得一提的是,每接收到的数据包都会产生一个处理数据包中数据的线程。我在Linux上运行服务器,如果它有所作为!
有谁知道什么可能导致这种行为发生?
Andrew
我的猜想是你的服务器端没有接收缓冲区空间。 – NPE
太少细节(例如,您使用的是什么Linux风格,JVM和Java版本),以及一些代码会有所帮助;肯定为每个数据包产生一个新的线程是__bad__想法(使用线程池和/或队列)。无论如何,考虑UDP是不可靠的。 – Viruzzo
我说错了一个线程被产生。我正在使用cachedThreadPool和ExecutorService来处理数据包。虽然我知道UDP是不可靠的,但它会突然停止丢弃数据包,特别是当我在本地主机上测试实现时,这是令人怀疑的。我会更深入地了解接收缓冲区的大小。 – Andrew