|
|
1
12
但是,此链接可能会让您最感兴趣,因为它直接与网络游戏编程有关: 如果我引用一些小的话:
不过,我还是建议你自己研究一下这个问题,并确定哪些协议适合你 你的 |
|
|
2
7
首先,我将转述史蒂文斯的 Unix Network Programming 他基本上是这样说的:
假设您发送了两个独立的数据包/请求。先是A然后是B。由于TCP是基于流的,如果一个get在网络中丢失并且需要重新传输,那么即使B已经成功到达,它也无法通过堆栈传递到应用程序,直到A到达,从而引入不必要的延迟。不仅如此,在A到达之前,B无法被堆栈确认,这可能导致B也被重新传输,从而导致不必要的网络拥塞。 解决此问题的一种方法是为每个请求使用单独的连接,但这也会引入延迟 和 hogs系统资源。UDP绕过了所有这些问题。 高性能(低延迟)服务器中的另一个问题是 Nagle Algorithm 这会增加TCP通信的延迟。 第二个问题的答案是WoW可能发送数据流,而不是独立的请求/应答对。另外,可以通过禁用 Nagle algorithm . 如果他们确实使用了一些请求/应答通信,他们可能只是做出了一个设计决策,即可靠性对他们来说比延迟更重要。 |
|
|
3
4
定义“严重的高性能”-您在谈论多少并发连接以及有多少数据在流动? 看看这个问题的答案 What do you use when you need reliable UDP? 这里有效使用UDP的关键是要有一定程度的可靠性和不可靠性,并且每个数据报能够独立于其他数据报进行处理的程度越高,您就越有优势。与TCP相比的优势在于,您可以对每个数据报进行操作,并决定是否可以在数据报到达时使用它。这就是为什么它适用于动作游戏。 因此,IMHO,如果您需要100%的可靠性和订单交付,那么使用TCP;不要尝试在UDP中重新实现TCP。 |
|
|
4
2
这是可靠性与性能之比。 FPS游戏不需要所有的数据包到达目的地、按顺序到达目的地、非常大或确保大吞吐量。它们只需要数据包尽快到达服务器。这是最终的优先级,TCP的开销只是一个不必要的负担。 哇,在其“不太实时”的通信中,通常需要传输大量数据(在拥挤的区域),可能需要处理超过MTU的数据包(需要分段),并且需要可靠性(越少越大的数据包=丢失的数据包越多)。因此,选择TCP是合乎逻辑的。大多数回合制战略游戏和类似游戏也是如此。在游戏中,ping为30毫秒的玩家击败ping为50毫秒的玩家,UDP为国王。 |
|
|
5
1
如果要实现重传,则需要执行相同的操作,因此将有相同的开销。但是,如果您知道端到端链路速度,或者某些消息可能无法正常传递,或者某些消息不需要重新传输,UDP确实会给您带来优势。保持游戏场景: 包2=射击 大多数游戏设计者,如果数据包1丢失,但收到数据包3,数据包1就不再重要,因为它包含过时的信息。然而,您可以选择说数据包2很重要,所以如果它没有得到确认,就发送一个重新传输。 如果您需要高吞吐量,并使用1000Mbps以太网直接连接两台服务器,TCP/IP将需要一段时间才能扩展,并且会增加额外的开销,而且由于拥塞避免机制,可能永远无法实现真正的千兆连接。但是,您知道它是1 Gbps,所以您可以将自己的UDP设置为以高达1 Gbps(减去开销)的速率传输。
Udp不太适用于游戏服务器,主要是在上述场景之外,以及实时作战系统,如第一人称射击游戏,其中可以丢弃消息,并且即将出现的新消息将使丢弃的消息无效。魔兽世界可以不使用TCP,因为它们不需要精确的计时,而且可能有一些很好的逻辑,让你很难分辨出它们之间的区别。战斗系统根本不需要速度。 我还认为,一些理由是多年前的遗留问题,当时每个人的互联网连接都不那么可靠,速度也较慢。TCP对于共享网络也更为宽松,因此如果有很多事情发生,它会减慢速度,以便每个人都能共享连接(避免拥塞)。 TCP/IP是经过多年研究,由比我聪明得多的人设计的协议。在过去几年中进行的调整使它能够以我们看到的越来越快的平均网络速度表现得更好,并且不需要对使用有太多的了解。 然而,用UDP来代替它确实需要对网络有深刻的理解。我见过写得不好的UDP程序使1Gbps的链路饱和,并杀死链路上的所有通信量,因为它们实现了一个相当幼稚的重传算法。 下面列出了TCP/IP现在可以做的一些事情,这些事情您可能会因为使用UDP而失去: -为了到达你的计划 -最大段大小 -路径MTU发现 因此,如果TCP/IP适合您的需要,我强烈建议您坚持使用它。 也不是吹毛求疵,但你对运行在TCP/IP上的Internet的评论是错误的,事实上有几十种Internet可路由协议 check them out here . 我想你指的是网页和网络服务器都运行在TCP/IP之上。这对于网络来说也是一件好事,只要页面显示正确,我们人类就不会注意到延迟。即使对于TCP/IP,他们也面临一些挑战,即TCP/IP对web的攻击性不够: Google thinks tcp/ip should be more aggressive by default |
|
|
A B · C#Excel自动调整列避免长文本时出错 1 年前 |
|
|
Megrez7 · C#ToArray转换合并为一行,导致数组元素更改 1 年前 |
|
Aycon · 在工厂方法中释放部分创建的对象的正确方法是什么? 1 年前 |
|
|
Sei · Avalonia/WPF将路由器传递到控制模板 1 年前 |