C# 池、套接字和其他东西

C# 池、套接字和其他东西,c#,web,windows-phone,communication,C#,Web,Windows Phone,Communication,我有一个Windows Phone游戏,需要支持多人游戏。多人游戏与Wordament中的类似:每个人都玩同一个游戏;客户端最初获得游戏,然后每个玩家自己玩游戏,而不与其他玩家进行任何交互。当游戏结束时,收集并显示每个人的结果。区别在于:在我的应用程序中,游戏不会在指定的时间段后结束,而是在一个客户端发出信号时结束。因此,当有人完成游戏(达到目标)时,必须通知所有其他人有人赢了 我最初的想法是,每隔5秒钟将服务器集中一次,看看游戏状态是否已更改。当一个客户端完成游戏时,它发送一个包含该信息的请求

我有一个Windows Phone游戏,需要支持多人游戏。多人游戏与Wordament中的类似:每个人都玩同一个游戏;客户端最初获得游戏,然后每个玩家自己玩游戏,而不与其他玩家进行任何交互。当游戏结束时,收集并显示每个人的结果。区别在于:在我的应用程序中,游戏不会在指定的时间段后结束,而是在一个客户端发出信号时结束。因此,当有人完成游戏(达到目标)时,必须通知所有其他人有人赢了

我最初的想法是,每隔5秒钟将服务器集中一次,看看游戏状态是否已更改。当一个客户端完成游戏时,它发送一个包含该信息的请求,所有其他客户端在下一个池请求时将获得新状态。依我看,这是最简单、最方便的解决方案,因为我只需要一个字节的数据来告诉我游戏是否结束

实时性(如毫秒精度)并不重要。正如您在上一段中可能已经注意到的,5秒的延迟是可以接受的


然而,专家们,我在问你们,双工信道是否更适合这种情况?我找到了像Pusher这样提供双向通道的解决方案,但在我看来,这样的解决方案非常复杂且昂贵(我们的预算非常有限)

将分享我目前的知识

拉动(投票)
易于实施,应用广泛。
示例:Facebook.com、TeamCity web界面、QPID Message Broker的.NET客户端

推送
请看这篇文章

我自己注意到的是:配置需要额外的努力,可伸缩性和性能可能存在问题
我能想到的唯一一种情况是——不断交换大量数据
示例:大型多人在线游戏(包含大量事件,通知时间非常关键)

按需获取更改
典型的商业桌面应用程序。
示例:TFS(刷新网格(任务和bug),签出时获得锁定文件状态)


结论:您的任务池非常适合

为什么不在客户端/服务器之间建立一个TCP连接,只要游戏运行,这个连接就会保持有效?那么你就自动有了一个双向的沟通渠道?如果此连接中断(玩家能否在x分钟内重新连接,游戏是否会立即结束等),会发生什么情况?任何玩家都可以随时(解除)连接。我的服务器主持游戏,所有玩家只有一个游戏。我认为tcp连接需要更强大的服务器才能容纳所有连接