针对大量连接的在线游戏客户端 - 服务器双向通信的最佳实践

时间:2015-03-28 07:25:42

标签: android sockets client-server multiplayer

我试过阅读很多论坛和文章,但仍然不知道应该选择哪一个。

考虑一个小型多人益智游戏,客户端在Android设备上运行。服务器是一个专用的租用电脑,带有Win服务器。
假设一个游戏由3个玩家组成(A-B-C)。当3名玩家准备就绪时,游戏开始:服务器发送通知" currentPlayer = A"到A-B-C。在电话中,A变为可播放,B-C仅被阻止/观察者。当A完成后,发送" next"到服务器,服务器发送通知" currentPlayer = B"到A-B-C ......等......

这是一个非常简化的模型(当然在比赛期间应该发生更多的沟通,因为B-C希望看到A在被阻挡/观察者时正在做什么等) - 但足以解决我的问题。

所以我需要一个双向沟通平台。要发送的信息通常很少,但是经常发生,所以不要为每条消息留下很大的开销,所以我想永久连接看起来就像我需要的那样。

基于HTTP的东西是不可能的,因为那是客户 - >仅限服务器。好的,我可以定期询问每个客户的游戏当前状态,但这太可怕了。在这里,我需要在每个请求之前建立连接,看起来太多了。

然后我想套接字。它们始终连接(快速通信,永久连接)。看起来不错,但问题是,如果我有100K游戏,那就是300K的套接字连接。但AFAIK服务器可以处理最大65K端口/地址。这还不够。更不用说,这将意味着服务器上的300K线程(每个套接字连接的线程)。有没有普通的PC可以处理它?服务器没有游戏逻辑,只在玩家之间发送信息,因此线程不会做太多 我想也许可以使用几个端口,让服务器接受8000-8999,这意味着1K * 65K最大连接。当客户端连接时,它可以选择一个随机端口进行连接,以平衡它。可以吗?但是,线程号仍然可能是服务器上的问题吗?

你认为男人,其他建议,方法是什么?

修改
我想到了另一个想法:如果在网络游戏中,我将服务器退出:一个玩家将是他手机上的套接字服务器(让他们说玩家A),其他人(B和C)将连接到一个电话? 服务器仅用于组织游戏,存储分数等。

THX

0 个答案:

没有答案
相关问题