gpt4 book ai didi

C# .NET - 以最小延迟发送大量小消息(通过网络)

转载 作者:行者123 更新时间:2023-11-30 13:01:48 25 4
gpt4 key购买 nike

<分区>

我正在尝试找到一种最佳解决方案,用于通过 Internet 发送大量小消息(通常每秒约 1000 条,最高可达每秒 10000 条。每条消息最大 1KB),但最小化可能的延迟(例如考虑财务数据)。我从基本的 Duplex WCF channel 开始——这对本地网络非常有用。比起我需要将我的契约(Contract)更改为单向(OperationContractAttribute 并将 IsOneWay 属性设置为 true),否则每条消息都在等待确认,因此每条消息的网络延迟被计算两次。即使在这之后我的服务有时仍然没有 catch (在服务器端我只是从队列中读取消息并立即发送,在客户端我只是在接收消息后排队并且不阻塞)。

我想知道发送大量小消息是否会产生一些开销。有没有更好的方法(例如,某种基于 TCP 的流式传输)?

编辑1:根据反馈,我添加了一些技术信息:

我们的服务是单例模式,可以并发调用([ServiceBehavior(InstanceContextMode = InstanceContextMode.Single, ConcurrencyMode = ConcurrencyMode.Multiple)])。

我们没有配置节流,所以它有默认值(但是只有很少的并发客户端 - 1 到 4)

事实上,我们使用双工 channel - 客户端调用(注册),然后服务器向客户端发送大量消息。客户端本身执行很少的调用。服务器以同步方式通过回调 channel 调用客户端(我们遍历阻塞队列),但是非常非常频繁(提到的每秒约 1000 条消息,但每秒甚至几千条消息)。

Edit2: 解释为什么这不是 How well will WCF scale to a large number of client users? 的副本问题:

在我们的场景中,我们实际上只有很少数量的客户端(让我们甚至只考虑一个客户端),但是大量消息被连续发送到那个客户端 - 所以它有点像流式场景。

我们已经对典型的客户端场景和服务吞吐量进行了测量,发现我们目前在某些情况下无法很好地扩展(对于一天中短时间内需要处理大量消息的互联网客户端)已发送 - 然后这些可能由 WCF 排队,因为我们暂时看到接收时间延迟增加)。

不幸的是,横向扩展到多个服务器盒对我们来说不是可行的解决方案(一个客户端需要连接到一台服务器一整天)。

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