游戏服务器TCP网络套接字-公平性

用户名

我正在为回合制游戏编写游戏服务器。一个标准是游戏必须对所有玩家尽可能公平。

到目前为止,它的工作方式如下:

  • 每个客户端都有一个TCP连接。(如果相关,则通过WebSockets打开连接)
  • 在运行时,不断通过epoll检查传入的套接字消息。
  • 使用准备读取的套接字遍历客户端:
    • 阅读来自客户端的所有消息。
    • 更新每个消息的内部游戏状态。
    • 将传出邮件排队到受影响的客户端。
  • 在每个“窗口”(转弯)的末尾:
    • 遍历客户端并将所有排队的传出消息写入其套接字

我对公平的关注提出了以下问题:

我以什么顺序向客户发送消息有关系吗?

  • 对于我的程序,在所有套接字上调用write()只需一秒钟的时间,但是如果对客户端列表进行排序,在底层操作系统或网络中的某处会有所作为吗?
    • 也许我应该先发送给延迟最高的客户?

我如何将传出消息写入套接字有关系吗?

  • 目前,我将它们写成一大块。大小可以超过单个数据包。
    • 如果我以小于1个数据包的小块发送消息,客户端开始处理的速度会更快吗?
    • 一次向每个客户端写入一个价值为1的数据包,并多次遍历客户端会更好吗?

是否有任何Linux /网络配置会在这里产生影响?

在此先感谢您的反馈和提示。

usr

我以什么顺序向客户发送消息有关系吗?

是的,以毫秒为单位。如果网络接口可用于发送,则操作系统将立即开始发送。为什么要等待?

也许我应该先发送给延迟最高的客户?

我认为您应该以随机顺序发送。发送前先随机播放列表。这很公平。我认为您的问题是有效的,应该解决。

目前,我将它们写成一大块。[...]

首先,认识到TCP是基于流的,并且在协议级别没有数据包/消息。在物理层面上,数据确实被打包了。

无需手动拆分数据包,因为无论如何,客户端都会读取数据。如果客户端发出读取,则第一个数据包到达后,该读取将立即完成。在操作系统中没有人为的等待。

是否有任何Linux /网络配置会在这里产生影响?

我不知道。确保禁用打na。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

执行器服务公平性

来自分类Dev

调度线程时的JVM公平性

来自分类Dev

调度线程时的JVM公平性

来自分类Dev

ThreadPoolTaskExecutor bean中的同步队列公平性策略?

来自分类Dev

我需要关注游戏服务器的安全性吗?

来自分类Dev

具有IOS客户端兼容性的Web套接字服务器

来自分类Dev

套接字TCP服务器

来自分类Dev

TCP套接字服务器

来自分类Dev

SignalR作为游戏服务器

来自分类Dev

游戏服务器OOP设计

来自分类Dev

Java网络游戏服务器数据库

来自分类Dev

Steam只能以TCP模式连接,不能加入任何游戏服务器

来自分类Dev

从Java游戏服务器到客户端的TCP和UDP连接

来自分类Dev

Netty游戏服务器与游戏线程通信

来自分类Dev

如何区分服务器上的网络套接字

来自分类Dev

TCP / IP套接字服务器并发

来自分类Dev

通过TCP套接字将音频写入服务器

来自分类Dev

将python代码注入TCP套接字服务器

来自分类Dev

不同服务器中的套接字TCP连接

来自分类Dev

从TCP套接字HTTP服务器(围棋)

来自分类Dev

TCP / IP套接字服务器并发

来自分类Dev

TCP套接字服务器不发送

来自分类Dev

TCP套接字读/写冻结服务器

来自分类Dev

套接字编程:TCP 白天服务器?

来自分类Dev

Java TCP 客户端/服务器套接字

来自分类Dev

C TCP / IP服务器绑定错误-非套接字上的套接字操作

来自分类Dev

Python 2.7.8:套接字-TCP套接字中的客户端服务器数据丢失

来自分类Dev

从bash运行游戏服务器,无需等待输入

来自分类Dev

iOS回合制游戏服务器成本