java – 我的服务器是否同时使用TCP和UDP?

前端之家收集整理的这篇文章主要介绍了java – 我的服务器是否同时使用TCP和UDP?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在写一个客户端/服务器应用程序,真的找不到符合我需要的指南.做我自己的事情,在我甚至开始之前就会引起许多设计缺陷.例如,服务器应每秒更新一次客户端状态多次.我假设我无法单独更新每个客户端,但UDP广播应该解决这个问题.但是,我仍然需要一个TCP通道来与每个客户端可靠地通信,如:聊天消息,用户输入等.

研究这个话题似乎是一个服务器可以同时使用这两个协议 – 但只有可能(不是感性的).没有人提出这样的做法,实际上我从this article聚集起来,使用这两种方法都不好用.

现在我非常困惑我应该如何处理我的服务器中的数据.除非我完全误解了有关数据包丢失的信息,否则我想要保证用户输入的’server-request-packet’不会丢失.关于使用UDP保证交付的所有答案都说,使用TCP,而不会使用TCP.更令人沮丧的是,每个服务器/客户端程序,我可以想象,至少需要一些保证传递的消息(例如“断开”消息?).

我应该使用UDP,TCP,还是我只是想这个完全错了?

解决方法

让我们得到一些事实:

> UDP不可靠.永远.
在某些情况下,UDP可能特别有损;例如如果存在网络拥塞,速率限制或流量分析,或者如果UDP消息大小大于MTU.
> UDP广播仅适用于您的本地网段.互联网路由器通常不允许广播进一步传播.这真的限制了它的有用性.
> UDP组播可能是一种可能性,除了它也被阻止.

所以这可能让你有两个主要的可能性:

>从您的服务器到每个客户端的UDP点对点消息传递.
> TCP从服务器到每个客户端.

另一种可能性是使用UDP或TCP的某种对等网格通信,但是这变得非常复杂.不要去那里,除非你真的需要,真的知道你在做什么.

所以你的问题.

Should I use UDP,both or am I just thinking completely wrong about this?

我建议在服务器和每个客户端之间使用TCP,因为它是最简单的.为了进一步简化,每个客户端使用多个TCP连接,以避免复用多个“对话”单个套接字.

网络性能不是最佳的,但是它的应用可能会很好.而且我怀疑这是您想要花费所有开发人员时间的应用程序的一部分.

当您达到工作应用程序(客户端和服务器端)的位置,并且有人使用它时,您可能会发现(或不是)网络是主要的瓶颈和用户不满意的原因.然后,您将看到优化应用程序版本2.0中的通信.

当您实现版本2.0(或3.0 …)来解决可扩展性时,您将需要从依赖于单个服务器的方式移动.简单地说,如果你有N个客户端,N不断增加,那么在某个时候单个服务器将无法应付.应用程序设计中的其他东西也可能是有问题的.例如,在游戏应用程序中,您不能向所有其他玩家发送关于每个玩家的持续更新…玩家人数不断增长.但请注意,这些问题在很大程度上与您使用的网络协议无关.

原文链接:https://www.f2er.com/java/122898.html

猜你在找的Java相关文章