在Web服务器代码中,其中一个对象是打开套接字连接以从另一个第三方服务器进行侦听。此套接字连接特定于登录到我们的Web服务器的个人用户。
我想在单个线程中运行并保留侦听器对象,以便我可以在回发后对该特定用户使用相同的线程块。我们计划在单个Web服务器上进行大约100个并发会话。
是否可以实现这种架构,我知道在ASP.Net中启动长时间运行的线程并不是一个好习惯。我没有其他选择,因为我们依赖于我们正在使用的第三方服务器。如何跟踪这些线程并在回发期间重新关联
非常感谢您的帮助。
感谢。 苏尼
答案 0 :(得分:1)
只有在运行单个池(不是很多池/ web-garden)*
时才可以这样做您可以使用static Dictionary<string, object>
来存储与用户的会话ID连接的字符串连接的线程指针(对象)。
当用户进入页面时,你会检查是否有一个线程正在运行,基于session-id,使用静态字典,然后如果他有一个你可以获得该线程,或者你创建一个新...其余的由你决定。
还要确保一个池不是自动回收。
这是一个简单的一般想法。您需要实现字典的同步,线程的句柄以及与会话的连接。
[*]如果您有许多池,那么静态字典将在许多线程(不同的池)上中断,因此每个用户不能只持有一个线程。
如果你有很多游泳池。
在这种情况下,您需要一个数据库来保存您打开的线程/连接的结果。在那里,您使用数据库连接用户ID(如果已注册)或用户的会话ID,以及异步事件的返回结果,并在下一个视图页面向您的用户显示。