使用SignalR将通知从Web应用程序推送到桌面Windows窗体应用程序的可行性

莱拉

我想在Web应用程序和桌面Winforms应用程序之间构建一个通知系统。

我希望我的Web应用程序将通知推送到Windows Forms Desktop应用程序中,同时我希望过滤将传递给用户的消息。我的意思是并非所有连接的用户都会收到所有消息。服务器端(Web应用程序)将进行过滤过程,以确定谁将收到什么。

我希望桌面应用程序接收通知(如果已连接),否则将什么也不会接收。如果应用未连接或未运行,我不想保存来自服务器的通知。推送通知将是即时的,不会保存在客户端,它们只会显示。

我还担心:如果连接了多个用户并同时从服务器请求,这会影响服务器的性能吗?

例如,将有20,000个用户使用Windows窗体应用程序从服务器端(Web应用程序)接收通知,具体取决于通知的类别。

SignalR是否支持这种情况?

尔坎·德米雷尔

SignalR是否支持这种情况?

是的,它支持并且适用于实时通知。

您可以使用将消息广播到已连接客户端的指定子集。但不要将组用于敏感数据。

您可以跟踪/映射已连接的客户端,并仅通过connectionId / connectionIds将消息发送给特定的用户通知。

如果要提高性能,那么20000个并发连接(我假设是并发的)的确很多。首先,您应该更改IIS配置以支持5000多个并发请求。

您应该优化信号器的性能邮件大小应较小。每条消息的最大长度应为4 Kb(我建议您对这么多并发连接使用更少的消息)。

Signalr的用途,Json因此您可以JsonProperty用来减小邮件大小。

[JsonProperty("op")]
public decimal OrderPrice

为什么邮件大小很重要?因为每个连接在服务器端都有一个缓冲区。如果客户端可以收到1条消息,但此时服务器发送2条消息,则消息将填充到缓冲区中。这些缓冲区使用内存。因此,您应该更小心地使用20000个并发连接。否则您将遭受内存消耗。

但是在您的刺激中,消息大小将不够,您还应该降低此bufffer限制。

DefaultMessageBufferSize:默认情况下,SignalR在每个集线器每个连接的内存中保留1000条消息。如果使用大消息,则可能会产生内存问题,可以通过减小此值来缓解此问题。可以在ASP.NET应用程序的Application_Start事件处理程序中,或者在自托管应用程序的OWIN启动类的Configuration方法中设置此设置。下面的示例演示如何减少此值,以减少应用程序的内存占用,以减少所使用的服务器内存量:

public class Startup
{
    public void Configuration(IAppBuilder app)
    {
        // Any connection or hub wire up and configuration should go here
      GlobalHost.Configuration.DefaultMessageBufferSize = 500;
      app.MapSignalR();
    }
}

我建议您使用它100。减小缓冲区限制有什么缺点?当缓冲区已满时,它将不会得到任何新的消息。这意味着客户将丢失一些通知。因此,如果您的通知是事务性的(用户必须接收),则不要将缓冲区大小减少很多。但是,如果不能,则可以减小(最小值必须为32)。

您应在服务器端和客户端均使用net 4.5或更高版本,并且您的客户端应具有Windows8或更高版本以支持websocket。

应用这些步骤后,请遵循您的内存消耗并更改消息大小/缓冲区限制/消息的频率。

奖励: 20000个并发请求太多。因此,如果您遇到性能问题,建议您使用负载平衡器/扩展Signalr BackPlane这样,您将没有1个Web服务器,比方说4个。每个Web服务器平均有5000个并发请求。当您在服务器上发送一条消息时,其他服务器(以及它们的客户端)将通过背板获得该消息。有什么缺点?您应该使用共享资源(例如:数据库)来跟踪/映射具有connectionIds的用户。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

将Windows Azure Azure移动服务中的通知推送到html / js Web应用程序

使用Nservice总线将消息从Web应用程序发送到桌面Windows应用程序

使用 Kubernetes 架构在不同节点上部署应用程序的标准方式的可行性

推送桌面应用程序的通知

.NET多个应用程序产品-自动安装程序的可行性

从 Web 应用程序推送到 git

在超过200个中等到复杂的屏幕上将angular js用于Web应用程序的可行性

Web应用程序如何将推送通知发送到iOS设备?

如何将推送通知发送到Web应用程序和浏览器?

如何将通知推送到在线Web应用程序用户?

Web应用程序的推送通知

拥有多页GWT应用程序的可行性

Google Data Studio用于多租户SaaS应用程序的可行性

使用生产服务器证书将推送通知发送到开发应用程序

使用phonegap将推送通知发送到Android上特定用户的应用程序

Windows 10使用桌面应用程序的通知

Windows窗体应用程序中的Windows应用商店通知

将Java应用程序(使用Spring的Web和桌面应用程序)与mongodb连接

通过Github桌面应用程序(Windows)推送到Github的提交未显示

在Windows 8桌面应用程序中推送通知

将SignalR用于桌面应用程序是否正确?

仅使用“ Web应用程序”方法将Firebase添加到我的Cordova应用程序是否可行?

是否可以将iOS推送通知发送到两个不同的应用程序?

如何将推送通知发送到安装在mdm上的iOS应用程序?

Heroku-将子树推送到不同的应用程序

Filebeat与直接将日志从应用程序推送到Logstash

无法将应用程序推送到Bluemix

将Rails应用程序推送到Heroku时出错

应用程序配置Windows窗体应用程序