gpt4 book ai didi

.net - 开始/结束与 1000 个客户端的 socketasynceventargs

转载 作者:行者123 更新时间:2023-12-03 11:50:44 24 4
gpt4 key购买 nike

我想知道哪种异步类型在开发速度和稳定性方面都是最好的。我正在编写一个概念证明网络应用程序,它必须支持 1000 个并发客户端。

每个客户端每秒发送大约 5 个 30 字节的数据包。服务器每秒发送大约 5 个 200 字节的数据包。

我从早期的阻塞套接字测试中得到了这些数字。我认为我应该使用 SocketAsyncEventArgs 来实现高吞吐量,但这也需要更长的时间来开发。

谢谢

最佳答案

IIRC 两者之间的主要区别在于 SocketAsyncEventArgs 消除了分配大量对象的需要(即回调等),考虑到您的吞吐量,这可能是一个有效的问题。特别是,这可能有助于防止由于 GC 导致的周期性性能下降。一个额外的好处是混合“这可能运行异步,或者它可能运行同步;我会告诉你哪个”——需要一小段时间来适应,但非常方便。

但是,与所有事物一样,任何高吞吐量系统都需要设计以实现高吞吐量。如果您是从头开始,我将很难找到使用 SocketAsyncEventArgs 的理由 - 无论哪种方式,异步网络 IO 总是需要一些头疼和规划。当我们为 SE(处理 50k+ 并发连接)编写 web-socket 服务器时,一个特别有用的技巧是确保我们回收所有 byte[] 缓冲区,即从中获取它们(并返回它们到)中央缓冲区池,仅在池为空时分配新缓冲区(并且作为必然结果,仅在池满时才将缓冲区丢弃在地板上)。当然,在那种情况下,我们可能不会每次都与所有客户交谈;如果您要定期与每个客户端交谈,另一种选择可能是为每个连接设置一个缓冲区。可能会有更多的内存开销,但可能会使事情变得更简单。

至于“也需要更长的时间来开发”;这可能是正确的,特别是如果您已经非常熟悉旧的异步模型。我想这归结为拥有性能稳定的服务器的重要性。当然,这两种方法都需要进行严格的测试。

关于.net - 开始/结束与 1000 个客户端的 socketasynceventargs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11824751/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com