多个服务连接与MMO中的内部路由

时间:2014-11-21 08:43:05

标签: sockets networking network-programming scalability

服务器由用户交互的几种服务组成:配置文件,游戏逻辑,物理。

我听说将多个客户端连接到同一台服务器是一种不好的做法。

我不确定我是否会使用UDP或TCP。

服务是实时的,他们应该尽快回复,所以如果没有真正重要的原因,我不想包括任何额外的重新路由。那么在我的情况下,是否有任何理由通过一个外部端点服务将流量重新传输到特定的内部服务?

1 个答案:

答案 0 :(得分:0)

这似乎是一个包中的多个问题。我会尝试回答那些我认为是独立的......

UDP vs TCP:你说的是“实时”,这通常意味着UDP是正确的选择。但是,这意味着必须处理丢失的数据包和可能的数据包重新排序。但是,使用UDP会留下一些可能的延迟减少技巧。

从单个客户端到单个服务器的多个连接:这会消耗客户端(可能是可忽略的)和服务器上的资源(实际上是端点)(可能是一个问题,可能是可忽略的)。使用单独的连接进行单独的关注(配置文件,物理,...)的优点是,当您需要将它们分离到单独的服务器(或服务器场)时,您不需要更新客户端,他们只需要连接使用已经测试的代码到其他终点。

需要“重新路由器”(或“负载均衡器”):最初可能不会成为问题。但是,它可能会在以后成为一个问题。根据您的整体设计和服务器操作系统,使用UDP实际上可能成为此处的资产。 UDP数据包到达负载均衡器,分派到右后端,然后理论上可以发回一个带有负载均衡器源IP的回复。

另一种选择是拥有“会话经纪人”。客户端与知名端点建立初始连接,说“我是客户端,告诉我我的配置文件,物理,服务器是什么”,代理考虑当前负载,可能是客户端的位置以及其他可能有意义的事情,然后客户端自己连接到相关的后端。这样做的缺点是,将正在进行的会话静默地迁移到新的后端更加困难(并非不可能,但更难),当有负载平衡器时,这可以基本上透明地完成。