0

我正在为一个学校项目用 C# 创建一个纸牌游戏。这个纸牌游戏是联网的。纸牌游戏的游戏数据作为 gameData 存储在单例对象中。gameData 包含玩家姓名、游戏正在等待的玩家、玩家对象。每个玩家有 3 个 List 对象。卡片又是自定义对象。最初我打算为每个卡片、玩家和 gameData 对象创建一个 ToByte() 方法,并使用 TCPlistener 将它们序列化以通过网络发送。但是时间不多了,我正在寻找其他方法。

这些是我听说过的解决方案:

-SOAP(不知道如何实现)

- 数据库(对于 LAN 来说似乎有点过分了,除非可以让小型数据库服务器即时运行)

-客户端激活对象(但这会为每个客户端创建不同的单例)

我想做的是让每个客户端都使用他们自己的游戏数据,但使用 get, set 它会与托管这个单例对象数据的服务器对话。你有什么建议吗?

4

4 回答 4

5

WCF 支持单例服务

[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)] 
class MySingleton : ...
{...}

这样,您就有了一个服务于所有客户的服务实例。

WCF 使得用很少的网络代码进行网络通信变得容易。

查看这篇文章了解更多详情。

将单例实例与您找到的任何 WCF 教程相结合,您应该有一个很好的起点。

祝你好运。

于 2009-02-23T20:38:42.097 回答
1

由于这是一个学校项目,我认为使用 .NET 远程处理是最快的方法:)

为了使事情变得简单并减少令人讨厌的调试和对象管理的东西,我建议使用单例对象处理服务器上的所有内容,并将值对象作为数据返回给客户端(同样,因为它是一个学校项目)。给每个客户端一个 ID 以传递给服务器对象。

于 2009-02-23T20:06:56.167 回答
0

.net 远程处理或多或少是为您所要求的那种事情而构建的,但不一定是您需要的。

对类的任何远程访问都会在线路的另一端留下一个“单例”,实际上根本不是单例,而是本地内存中的代理存根。

在您的情况下,我会添加一个服务类(可能的 Web 服务),它接受入站请求并将它们应用于服务器端的单例,然后返回所需的数据。这将为您节省调试痛苦的世界。

于 2009-02-23T20:22:08.127 回答
0

我会完全避免单身。远程处理不仅是一种痛苦,而且通常被认为是一种糟糕的设计模式。这里有很多关于 SO 以及网络上关于为什么单例不好的讨论。我认为,尤其是在这种情况下,如果单例会给您带来问题,请避免使用它。

[编辑] 避免单例的主要动机之一是单例提供了一个共享的全局状态,这是单元测试的敌人。尽可能避免它。

于 2009-02-23T20:26:08.540 回答