Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 多人纸牌游戏的设计考虑_C#_Multithreading_Wcf_Callback - Fatal编程技术网

C# 多人纸牌游戏的设计考虑

C# 多人纸牌游戏的设计考虑,c#,multithreading,wcf,callback,C#,Multithreading,Wcf,Callback,我在C#NET上开发一个纸牌游戏引擎已经有一段时间了。此时,该界面已接近完成,但到目前为止,它只是一个简单的控制台界面,具有ReadLine和WriteLine 对于数据,我有一个GameState对象,它在给定的时间点存储了几乎所有与游戏相关的信息。游戏的其余部分主要由事件驱动 我希望将其扩展到一个全面的在线应用程序中。我已经读了很多关于WCF及其在web服务中的回调支持的书,这对我来说似乎是一个不错的选择。然而,如果其中一个适合我,我愿意接受其他想法 我预期的唯一问题是,当我尝试这样做时,会

我在C#NET上开发一个纸牌游戏引擎已经有一段时间了。此时,该界面已接近完成,但到目前为止,它只是一个简单的控制台界面,具有
ReadLine
WriteLine

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

我希望将其扩展到一个全面的在线应用程序中。我已经读了很多关于WCF及其在web服务中的回调支持的书,这对我来说似乎是一个不错的选择。然而,如果其中一个适合我,我愿意接受其他想法

我预期的唯一问题是,当我尝试这样做时,会出现线程噩梦。我想到了一种方法,可以尽可能减少线程问题:

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

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


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

如果你们想让它成为一个web应用程序(html),那么我会说你们最好使用web套接字(chrome本机支持,其他浏览器的flash插件)并将类似websocket的服务器集成到代码中。这样就可以实现从服务器到客户端的真正推送通信

如果您正在创建silverlight前端,您有很多选择,但从我收集的信息来看,如果您想同时扩展超过500个在线客户端,唯一的实际选择是使用自定义服务器,因为IIS无法同时处理很多客户端。我和一个制作silverlight版本的家伙聊了聊,他使用了一个定制服务器,它与iis很好地集成在一起,这个服务器对业余爱好者来说非常昂贵,但看起来很棒


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

很好的建议。我应该花些时间考虑一些可能更低层次的方法来实现这一点。我猜想,没有太多的游戏使用web服务作为联网的手段,而是有一个更专有的设置。