use*_*804 11 java udp tcp client-server broadcast
我正在编写客户端/服务器应用程序,但实际上找不到符合我需要的指南.在我开始之前,我自己做这件事会让我遇到许多设计缺陷.例如,服务器应该每秒多次更新每个客户端的状态.我假设我不能单独更新每个客户端,但UDP广播应该解决这个问题.但是我仍然需要一个TCP通道来与每个客户端可靠地通信,例如:聊天消息,用户输入等.
研究这个主题似乎服务器可以同时使用这两种协议 - 但只能是可能的(不是敏感的).没有人建议采用这种方法,事实上我从这篇文章中得知,使用这两种方法相当糟糕.
现在我对如何处理服务器中的数据非常困惑.除非我完全误解了丢包的内容,否则我想保证导致'server-request-packets'的用户输入不会丢失.关于保证使用UDP传递的所有关于SO的答案都说使用TCP.更令人沮丧的是,我能想象的每个服务器/客户端程序至少需要保证传递的一些消息(例如'disconnect'消息?).
我应该使用UDP,TCP,还是我只是在想这个问题?
Ste*_*n C 15
让我们在桌子上得到一些事实:
UDP不可靠.永远.
在某些情况下,UDP可能特别有损; 例如,如果存在网络拥塞,速率限制或流量分析,或者UDP消息大小是否大于MTU.
UDP广播仅适用于本地网段.互联网路由器通常不允许广播进一步传播.这确实限制了它的用处.
UDP多播可能是可能的,除了它也往往被阻止.
所以这可能会给你带来两个主要的可能性:
另一种可能性是使用UDP或TCP的某种对等网状通信,但这变得非常复杂.除非你真的需要,否则不要去那里,而且真的知道你在做什么.
所以对你的问题.
我应该使用UDP,TCP,还是我只是在想这个问题?
我建议在服务器和每个客户端之间使用TCP,因为它最简单.为了进一步简化,每个客户端使用多个TCP连接,以避免在单个套接字中复用多个"对话"的复杂性.
网络性能不是最佳的,但它可能足够好你的应用程序.我怀疑这是您希望花费所有开发人员时间的应用程序的一部分.
当你到达工作应用程序(客户端和服务器端)并且有人使用它时,你可能会发现(或不是!)网络是一个主要的瓶颈和用户不满的原因.然后,您将了解如何优化应用程序2.0版中的通信.
当您实现版本2.0(或3.0 ...)以解决可伸缩性时,您将需要从依赖单个服务器的方式开始.简而言之,如果你有N个客户端,并且N不断增加,那么在某些时候单个服务器将无法应对.应用程序设计中的其他内容也可能存在问题.例如,在游戏应用程序中,您无法向所有其他玩家发送有关每个玩家的持续更新...其中玩家数量不断增长.但请注意,这些问题在很大程度上与您使用的网络协议无关.
..但UDP广播应该解决这个问题
广播仅在本地网络内工作,相关的多播需要基础设施的支持 - 这不是微不足道的.
除此之外:"..编写客户端/服务器应用程序......"没有一般规则.通信方法和协议在很大程度上取决于用例,范围从简单的UDP或TCP数据包到复杂的消息传递体系结构,具有可靠性和实时性保证等.
因此,您需要做的事情取决于您要实现的目标,而您没有详细说明.
| 归档时间: |
|
| 查看次数: |
1399 次 |
| 最近记录: |