当前位置:  开发笔记 > 编程语言 > 正文

可伸缩套接字事件队列处理

如何解决《可伸缩套接字事件队列处理》经验,为你挑选了1个好方法。

我的C#类必须能够处理通过tcp流式套接字连接接收的大量事件.类的套接字从tcp服务器接收的事件消息量是完全可变的.例如,有时它只会在十秒钟内收到一条事件消息,而有时它会在一秒钟内收到六十条事件消息.

我正在使用Socket.ReceiveAsync来接收消息.如果接收操作处于挂起状态,则ReceiveAsync返回true;如果线路上已存在数据且接收操作同步完成,则ReceiveAsync返回false.如果操作处于挂起状态,Socket将在IO完成线程上调用我的回调,否则我在当前(IOC)线程中调用我自己的回调.此外,与事件消息混合我还收到对发送到此tcp服务器的命令的响应.响应消息立即处理; 单独地,通过解雇线程池工人.

但是,我想将事件消息排队,直到我有足够的(N)或者直到线上没有更多...然后激活线程池工作者来处理一批事件消息.此外,我希望所有事件都按顺序处理,所以我只希望一个线程池工作者一次处理这个事件.

事件消息的处理器只需要将消息缓冲区复制到对象中,引发事件然后将消息缓冲区释放回环形缓冲池.所以我的问题是......你认为实现这一目标的最佳策略是什么?

你需要更多信息吗?让我知道.谢谢!!



1> Don Neufeld..:

我不会每秒高达60个事件.在那个低级别的活动中,任何套接字处理方法都可以.我在一个线程上每秒处理5,000个事件,使用的硬件比当前机器的功能要差得多,只需使用select.

我会说,如果你想扩展,在线程之间单独切换消息将是一场灾难.您需要批处理或您的上下文切换将杀死性能.

推荐阅读
黄晓敏3023
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有