我一直在研究用Java创建一个简单的基于套接字的游戏,并在多个地方读取客户端套接字在单次交换后被销毁。这是继续连接的良好做法吗?服务器需要与客户端保持连接(即每次想要告诉客户端某事时都不使用socket.accept()),但不能每次都等待客户端的响应。我已经让服务器/客户端在不同的线程中运行,但是在每次交换意味着重新获取(或未能重新获取)与该客户端的连接后,都不会销毁套接字?我见过很多关于Java中套接字的冲突网站以及它们应该如何实现。
答案 0 :(得分:-1)
没有严格的规则,但它确实略微取决于您希望实现的数据速率。
例如,YouTube是一种流媒体视频服务,但视频数据是通过客户端使用https传送来获取批量视频数据。效率低,是的,但很容易编程。对于像YouTube这样的应用程序(防火墙等)使用https有很多理由,但最终的省电和网络性能不是其中之一。 “正确”的方式是使用像RTP这样的协议,它使用UDP传送小数据包然后可以重新排列成顺序,你还必须在CODEC级别处理丢失的帧,等等。网络流量少得多,对带宽受限的网络链接很友好,但在处理跨越防火墙,客户端软件等方面更加困难。
因此,如果您的游戏正在发送适量的数据,那么设置和拆除每个消息的整个套接字连接唯一的错误就是您自己会感到唠叨,以至于它不是最有效的解决方案。< / p>
虽然听起来您在客户端/服务器之间进行通信的需求与在等待通信完成时需要处理其他内容之间存在冲突。在这里,您将进入异步I / O领域。为了方便起见,我强烈建议你看看ZeroMQ--这将使一切变得更加简单。