0

我有一个客户端/服务器设置,它们之间有一个代理。我希望代理表现得更聪明一点,这样当连接 5 个客户端时,某些数据包可以从客户端中继到客户端,而不是客户端-> 服务器-> 客户端。每个客户端当前都有自己的线程,那么共享具有对其他客户端的引用的全局状态的最佳方式是什么。这个状态对象实际上只包含一个与每个客户端关联的 id 和一个对其套接字的引用,以便我可以在其上发送。

像字典这样简单的东西会起作用吗?我担心的是,在访问字典时,我可能有另一个客户端连接或断开连接,这将在我访问字典时修改字典。

4

3 回答 3

0

您应该阅读Semaphores

但在 C# 的上下文中,您需要确保谨慎且恰当地使用lock关键字。这东西很难,而且很容易以灾难性的方式出错。

于 2012-08-09T22:05:07.287 回答
0

如果您的代理设置为 WCF 服务,那么您可以使用 ASP.NET 缓存。WCF 中的会话状态是每次调用,但缓存仍然潜伏在幕后。请注意,这只是为您提供缓存 - 它不会为您提供对缓存的任何预滚动访问控制,因此您仍然会遇到竞争问题。

有关使用缓存的更多信息,请查看之前的 SO 问题 How to return HttpContext.Current.Cache from WCF? 和这篇博文在 WCF 服务中启用会话状态

于 2012-08-09T22:19:23.470 回答
0

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

也就是说,如果您决定使用字典,则应使用同步对它的访问

于 2012-08-09T22:20:32.490 回答