【问题标题】:How do WebSocket Clients work in .Net?WebSocket 客户端如何在 .Net 中工作?
【发布时间】:2014-09-17 23:33:58
【问题描述】:

我的问题与 WebSockets(在客户端)如何与 .Net 中的线程一起工作/行为更相关,而我正在寻找的答案更多是关于操作系统如何与 .Net 交互的低层次解释当它在其套接字上从服务器接收数据时线程。

假设我有一个客户端异步打开 1000 个到服务器的套接字。然后它坐在那里等待更新/事件通过。这些事件可以在不同的时间和频率到达。

假设每次数据通过套接字进入时,一个线程需要拾取它并对其进行一些工作,我是否正确假设 IF 所有 1000 个套接字在同时我将有 1000 个线程(每个套接字 1 个线程)来自线程池以从套接字中获取数据?如果我想打开 3000 个套接字怎么办?

非常感谢对此的任何澄清。

【问题讨论】:

  • 像 Ngnix 这样的 Web 套接字服务器不使用线程来管理连接。我希望这会有所帮助。

标签: c# .net multithreading websocket threadpool


【解决方案1】:

假设您使用的是.NET Framework library WebSocket,接收到的数据将在来自 ThreadPool(可能是 IO Completion Thread Pool)的线程上返回。

线程池 当使用线程池时,您不知道有多少不同的线程将同时处于活动状态。数据被放在一个队列中,线程池尽可能快地处理它。您可以控制它将使用的最小/最大线程数,但未指定池创建/销毁其线程的方式。

上述内容适用于 .NET 中的大多数异步操作。

例外情况 如果您在同步上下文(例如 UI 线程)中等待异步接收操作,则操作将在同一上下文(UI 线程)中恢复,除非您禁止同步上下文。在这种情况下,将只使用一个线程,接收操作将被排队并按顺序处理。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-01
    相关资源
    最近更新 更多