2012-08-09 54 views
0

我有一个坐在它们之间的代理的客户端/服务器设置。我希望代理行为更智能一些,以便连接5个客户端时,某些数据包可以从客户端传输到客户端,而不是客户端 - >服务器 - >客户端。每个客户端当前正在获取他们自己的线程,因此共享引用其他客户端的全局状态的最佳方式是什么。这个状态对象实际上只是持有一个与每个客户端关联的id和一个对其套接字的引用,所以我可以发送它。什么是线程安全的方式来维护所有线程都可访问的全局状态

会像字典一样简单的工作?我担心的是,当访问字典时,我可能会有另一个客户端连接或断开连接,它将在即时访问它时修改字典。

+0

这个问题线程安全的版本,不能笼统回答。按照现状,我不认为你会收到有用的答案。 – usr 2012-08-09 22:18:39

回答

0

字典将工作,如果字典是适合您的情况的数据结构。这个决定与多线程无关。

这就是说,如果你决定使用一个字典,你应该使用

0

您应该阅读Semaphores

但在C#的上下文中,您需要确保您仔细和恰当地使用lock关键字。这东西是,很容易在灾难性的方式得到错误。

0

如果您的代理设置为WCF服务,那么您可以使用ASP.NET缓存。 WCF中的会话状态是每次调用,但缓存仍然潜伏在幕后。请注意,这只会给你缓存 - 它不会给你预缓存的缓存访问控制,所以你仍然可以获得种族问题。

有关使用缓存的更多信息,请查看以前的SO问题如何返回HttpContext.Current.Cache from WCF?和此博文Enable Session State in a WCF service