【问题标题】:Application sharding communication best practice?应用分片通信最佳实践?
【发布时间】:2017-04-10 16:57:50
【问题描述】:

大家早上好,

我正在开发一个考虑到这种连接架构的客户端-服务器游戏应用程序:

我刚刚完成了登录部分:google play 上的客户端身份验证,将令牌+用户 ID 发送到一个登录服务器,登录服务器使用 google play 对数据进行身份验证,并为该用户在数据库上创建一个会话。

我的想法是成功登录,登录服务器与主服务器之一进行对话以注册预期的客户端,关闭与登录服务器的连接,然后客户端连接到该服务器。我想拥有多个主服务器来进行扩展和本地化,但是问题是当客户端位于不同的主服务器上时如何管理客户端与客户端的交互?最佳做法是什么?

让我们考虑一个简单的“好友已连接”通知系统。所以想象模式上的所有客户端都是朋友,客户端 2 和 3 已经连接,客户端 1 连接,主服务器在客户端 1 连接上构建一个客户端模型,该模型将有一个朋友列表(如果包含在线状态和连接的服务器 ID,如果在线的)。它将按服务器对在线朋友进行分组,并向这些主服务器发送一个批量的friend_connected数据包并通知用户(如果是同一台服务器,只需将friend_connected发送给每个用户)。

那么我应该在所有主服务器之间创建一个 TCP Socket 连接吗?我是第一次构建多服务器结构,所以不确定是否有更好/更简单的方法来管理它。我考虑过使用中间服务器来管理主服务器之间的消息传递,但可能只有在您的系统有数百台服务器时才值得,因此每个主服务器只有一个到最近的消息管理器的套接字。

登录服务器不需要互连,因为没有客户端-客户端通信,它只是管理一个传入的连接,验证客户端并设置会话。

【问题讨论】:

    标签: c# sockets architecture server client-server


    【解决方案1】:

    这是为“主服务器”使用负载平衡器的好方案,如果您需要客户端始终连接到同一台服务器,则应为此使用 cookie,这称为“粘性会话”。

    这个解决方案有几个候选者,我的建议是:

    如果需要,我可以继续帮助/指导您:)

    【讨论】:

    • 嗨克里斯蒂安,感谢您的回复!如果“主服务器”物理上没有在一起怎么办?在本地化场景中,您将服务器放在不同的国家/地区,以便更好地 ping/连接到区域用户。
    • 在这种情况下,最简单的方法是使用 Route53(您必须创建一个新域或将您的 NS 迁移到这里),您需要创建一个地理定位路由策略 (@987654324 @)。
    • 如果Route53不是一个选项,那么HA是一个完美的候选人,看看这个:tech.shareaholic.com/2012/10/26/…
    猜你喜欢
    • 2017-03-18
    • 1970-01-01
    • 1970-01-01
    • 2012-08-28
    • 2015-07-23
    • 2010-09-23
    • 1970-01-01
    • 1970-01-01
    • 2012-12-24
    相关资源
    最近更新 更多