2010-11-12 61 views
0

我一直在C#.NET的纸牌游戏引擎上工作一段时间。目前已接近完成,但目前为止,该界面只是一个简单的控制台,其中ReadLineWriteLine多人纸牌游戏的设计注意事项

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

我正在寻找分支成一个完整的在线应用程序。我一直在阅读很多关于WCF和它在Web服务中的回调支持,这对我来说似乎是一个不错的选择。但是,如果适合的话,我愿意接受其他想法。

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

1)让WCF服务只通过回调接口向用户请求数据(例如,提示某些操作)并提供几个通知客户有关游戏状态的更新。强调:客户不能'查询'游戏状态。他们向服务器发送数据的唯一方法是服务器通过回调来请求数据。

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

我想如果必须的话,我会挖掘并尝试使这件事情线程安全,但我想通过你们运行这个来看看你是否有任何建议。

回答

1

如果你想这是一个Web应用程序(HTML),那么我会说你最好的选择是使用网络套接字(在Chrome原生支持,其他浏览器的Flash插件)和WebSocket的服务器一样nugget融入你的代码。这实现了从服务器到客户端的真正推送通信。

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

如果你正在创建一个富客户端,你可以自由地抛出任何东西,甚至使用本地WCF的二进制套接字通信。

+0

好的建议。我应该花时间考虑一些可能的更低层次的实施方法。我会猜测,没有太多的游戏使用网络服务作为网络的手段,而是拥有更专有的设置。 – Ben 2010-11-12 17:39:57