- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想知道哪种异步类型在开发速度和稳定性方面都是最好的。我正在编写一个概念证明网络应用程序,它必须支持 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/
我有时会收到此错误: An asynchronous socket operation is already in progress using this SocketAsyncEventArgs i
我试图理解 C# 中的“SocketAsyncEventArgs”类。 http://msdn.microsoft.com/en-us/library/system.net.sockets.socke
我的 SocketAsyncEventArgs 类有问题..问题是当我尝试发送 8K 数据时例如在互联网上,套接字有时只发送 1K 或 2K,我知道这是正常的TCP 套接字和一次发送并不能保证一次接收
我正在为我的分布式系统编写消息层。我正在使用 IOCP,即 Socket.XXXAsync 方法。 下面是一些与我正在做的非常接近的东西(事实上,我的接收函数是基于他的): http://vadmys
在我的场景中,有许多客户端的 tcp 套接字连接到服务器。服务器从所有套接字接收 ReceiveAsync(),当回调被无误调用时,解析接收到的数据。如果一个套接字接收到的数据是某种类型的消息,则接收
我在 SocketAsyncEventArgs buffer is full of zeroes 中描述了类似的问题其中我的 SocketAsyncEventArgs UDP 服务器的实现接收具有以下
似乎无法在 .NET Socket 类的 AcceptAsync() 方法上指定超时。它接受一个 SocketAsyncEventArgs if (!socket.AcceptAsync(awaita
我最初在发送数据时遇到了竞争条件,问题是我允许使用多个 SocketAsyncEventArgs 来发送数据,但是第一个数据包在第二个数据包之前没有完全发送,这是因为我有它如果数据不适合缓冲区,它会循
我正在使用 SocketAsyncEventArgs 与数百种设备进行通信(其中大部分通过 GPRS)。有时,它们中的一些会停止响应,而且我似乎无法使操作超时,因为文档指出超时选项(即 SocketO
是否有正当理由不使用 TcpListener 而不是 SocketAsyncEventArgs 来实现高性能/高吞吐量 TCP 服务器? 我已经使用 SocketAsyncEventArgs 实现了这
好吧,我读了很多关于编写高可扩展服务器的问题,但我从来没有真正找到一个好的答案。无论如何,我想创建一个可扩展的客户端,它可以处理大量数据和连接。我创建的是一个使用 SocketAsyncEventAr
我四处寻找,很惊讶地发现绝对没有可以回答这个问题: 如何在使用 SocketAsyncEventArgs 时实现 SSL/TLS(或类似)加密?我确实读过,理论上可以使用SslStream 和“作弊”
所以我已经用 SocketAsyncEventArgs 和 socket.***Async 方法编写了一个 tcp 服务器。但我确实喜欢使用 Stream.ReadAsync 和 Stream.Wri
当使用“SocketAsyncEventArgs”类和 ReadAsync 时,我应该将读取缓冲区放在哪里以及将发送缓冲区放在哪里?或者我只能一次阅读或发送而不是两者?我有点困惑。 最佳答案 我认为您
我想使用 SocketAsyncEventArgs 事件创建一个异步套接字服务器。 服务器应该同时管理大约 1000 个连接。处理每个数据包逻辑的最佳方式是什么? 服务器设计基于this MSDN e
我一直在使用.NET 3.5异步套接字API,发现所有* Async方法都返回一个 bool 值,如果该操作同步完成,则它为false。 我对如何/为什么会发生这种情况感到困惑。这并不总是错误的情况,
我正在测试以下两种情况,一种有效,但另一种无效。我有套接字服务器和套接字客户端应用程序在两台不同的机器上运行 这两个场景都使用了 socketasynceventargs 场景 1(有效)循环创建 4
我有一个使用 SocketAsyncEventArgs 异步接收 UDP 数据包的标准实现。我从文档和一些谷歌搜索中不明白的是,我是否应该在回调本身内部完成处理消息的实际工作,比如 this comm
我正致力于使用 IOCP 和 SocketAsyncEventArgs 实现高性能服务器。据我所知,使用这种方法获取 SSL 并不“容易”,因为我发现您要么需要自己实现 SSL,要么以某种方式将使用
我看不到 pooled SocketAsyncEventArgs样式帮助我减少了为许多并发连接提供服务的服务器的内存消耗。 是的,它提供了 MS 的 Begin/End 样式的替代方案,上述 MSDN
我是一名优秀的程序员,十分优秀!