我有一个客户端/服务器设置,它们之间有代理。我希望代理表现得更聪明一些,这样当连接5个客户端时,某些数据包可以从客户端转发到客户端而不是客户端 - >服务器 - >客户。每个客户端当前都有自己的线程,因此共享引用其他客户端的全局状态的最佳方式是什么。这个状态对象实际上只包含一个与每个客户端关联的id和一个对它们的套接字的引用,以便我可以发送它。
像字典一样简单的工作吗?我担心的是,在访问字典时,我可能有另一个客户端连接或断开连接,这将修改字典作为我访问它。
答案 0 :(得分:0)
您应该阅读Semaphores。
但是在C#的上下文中,您需要确保使用lock
关键字仔细而恰当地进行操作。这些东西是 hard ,很容易在灾难性的方式出错。
答案 1 :(得分:0)
如果您的代理设置为WCF服务,则可以使用ASP.NET缓存。 WCF中的会话状态是每次调用,但缓存仍然存在于幕后。请注意,这只是为了给你缓存 - 它不会给你任何预先滚动的访问控制到缓存,所以你仍然可以得到种族问题。
有关使用缓存的详细信息,请查看此前的SO问题如何返回HttpContext.Current.Cache from WCF?以及此博文Enable Session State in a WCF service。
答案 2 :(得分:0)
字典可以工作,如果字典是适合您情况的数据结构。这个决定与多线程没什么关系。
也就是说,如果你决定使用字典,你应该使用
同步对它的访问lock
陈述Dictionary