多人纸牌游戏的设计考虑因素

时间:2010-11-12 06:27:13

标签: c# multithreading wcf callback

我一直在使用C#.NET的卡片游戏引擎。目前它已接近完成,但到目前为止界面只是一个简单的控制台ReadLineWriteLine

对于数据,我有一个GameState对象,可以在给定的时间点为游戏存储几乎所有相关信息。游戏的其余部分是由事件驱动的。

我希望将其分解为一个完整的在线应用程序。我一直在阅读很多关于WCF及其在Web服务中的回调支持,这对我来说似乎是一个不错的选择。但是,如果一个人适合,我会接受其他想法。

我期待的唯一问题是,当我尝试这样做时,是一个线程噩梦。我有一种方法,我想尽可能减少线程问题:

1)让WCF服务仅通过回调接口向用户请求数据(例如,提示某些动作)并提供几个单向回调以通知客户端游戏状态的更新。重点:客户无法“查询”游戏状态。他们将数据发送到服务器的唯一方法是服务器通过回调请求它。

我唯一担心的是客户端可能需要以某种我预期的方式从服务器请求某些数据。如果出现这种情况,我可以为客户提供一些方法来阅读游戏状态,但现在我必须开始考虑GameState对象上的Reader锁。

我想如果必须这样做,我会深入研究并尝试使这个东西线程安全,但我想让你们运行这个以确定你是否有任何建议。

1 个答案:

答案 0 :(得分:1)

如果您希望这是一个Web应用程序(html),那么我会说最好的选择是使用Web套接字(本机支持chrome,其他浏览器的flash插件)并集成websocket-server,如{{3进入你的代码。这实现了从服务器到客户端的真正推送通信。

如果你正在创建一个silverlight前端,你有很多选择但是从我收集到的唯一真正的选择,如果你想一次扩展到500个在线客户端是使用自定义服务器,因为IIS无法处理很多客户同时。我和那个制作了nugget的Silverlight版本的人聊了聊,他使用了一个与i Agricola很好地集成的自定义服务器,这对于一个爱好者来说相当昂贵,但看起来很棒。

如果您正在创建一个富客户端,您可以随意抛出任何内容,甚至可以使用WCF本机进行二进制套接字通信。