【问题标题】:managed Socket server component托管 Socket 服务器组件
【发布时间】:2012-03-23 21:01:20
【问题描述】:

我们需要开发一个高度可销售的解决方案,每天处理 8000 个同时套接字连接(来自销售点终端)和大约 100 万条消息。处理消息的业务逻辑已经开发完成。

我们目前正在调查异步套接字的使用,并想知道是否有人实现了可以长时间处理上述类似负载的 .NET 异步套接字服务器?不只是 POC,而是在现实生活中的生产环境中?

另外,是否存在任何可以处理这些要求的第三方服务器控件?我查看并找到了 ServerFramework http://www.serverframework.com/ 和 SocketWrench http://www.catalyst.com/products/socketwrench/ 但想知道是否有人使用过这些组件(或其他组件)?

非常感谢您的帮助

【问题讨论】:

    标签: .net performance sockets asynchronous


    【解决方案1】:

    8000 个同时连接确实不是那么多。在现代操作系统上,即使在商用硬件上,您也可以打开数十万个空闲连接。

    每天 100 万条消息本身也不算多。我可以在我的台式 PC 上处理 10-100k 的 TCP 往返,因此您会看到消息本身不会造成太大的负载。是业务逻辑会导致负载。

    您肯定需要为此使用异步 IO。 8000 个线程太多了。如果您实际上使用异步 IO 并且对缓冲区等有效,那么我根本不会预见到很多问题。

    【讨论】:

    • 感谢您的回答。有没有使用异步 IO 的好的示例实现?
    • 我想你会在谷歌上找到很多,因为它现在风靡一时。它与同步 IO 并没有不同。只是不太方便。
    • 您是在谈论 BeginReceive/BeginSend 中的异步调用还是使用 SocketAsyncEventArgs 的异步 IO 套接字调用?我知道有很多 BeginReceive/BeginSend 示例,但该部分表现不佳,并且会在重负载环境中导致内存不足问题。使用 SocketAsyncEventArgs 应该可以解决这个问题,但我只能找到一个 SocketAsyncEventArgs codeproject.com/Articles/83102/…
    • SocketAsyncEventArgs 主要用于避免分配。但是,它的编程模型很尴尬,因为您不能为此使用 TPL。我建议你使用 BeginReceive/BeginSend 看看你是否有性能问题(你不会)。
    • 我有一个 BeginReceive/BeginSend 示例,它似乎正在泄漏内存。我还没有花时间确定内存泄漏的位置。我想我将开始使用 SocketAsyncEventArgs。 BeginReceive/Begin send 在崩溃前不能同时处理超过 1000 个连接!
    猜你喜欢
    • 2013-08-21
    • 2017-02-12
    • 2014-09-12
    • 1970-01-01
    • 2021-10-09
    • 1970-01-01
    • 2021-12-18
    • 2011-03-11
    • 2017-08-22
    相关资源
    最近更新 更多