簡體   English   中英

ASP.net Web應用程序,通過創建服務將通知推送到瀏覽器

[英]ASP.net web app, push notification to browser by creating a service

Web應用程序Asp.net和C#

我正在開發一個Web應用程序,理想情況下將包括通知服務,當用戶在瀏覽器上收到興趣或類似消息時更新用戶。

理論

例如,用戶1像用戶2一樣單擊,並且用戶2信息被傳遞到我的Web應用程序中進行處理。 如果我想在聯機/脫機時更新用戶2,則需要一個異步處理的進程。 當用戶2登錄時,我的應用程序將必須檢查是否有任何更新並推送,並在用戶開啟時繼續檢查。 我看到的方式是,我需要為每個訪問我的應用程序的用戶指定一個任務,以檢查該用戶是否有任何更新。 如果沒有任何更新,該任務將被鎖定,等待更新。 已經有並發連接正在等待該任務,因此是消耗的2倍。

問題

我試圖找出另一種分配負載的方法,以便我的應用程序可以通過與其他系統或服務進行通信來優雅地處理推送。 由於為具有並發連接的每個用戶分配工作者任務將占用大量資源。

到目前為止研究

我調查了一個消息隊列系統,看是否可以解決問題,但是當進行研究時,似乎就像在做一個任務來處理每個訪問我的應用程序的用戶來偵聽來自隊列的任何消息一樣。

甚至更糟糕的是,我將不得不為每個用戶創建唯一的隊列(不建議這樣做),然后處理消息並為用戶在線/離線添加更多邏輯。

檢查更新的最有效方法是什么,是我上面描述的方式,即為每個用戶專用的任務使用我的Web應用程序,還是有另一種設計模式可用於服務我的應用程序的那一部分?

我想說的要點

使用信號器之類的框架或commet或長輪詢之類的方法將客戶端連接到我的Web應用程序時,我沒有任何問題。

我將signalR與SQLdependancy一起使用,但是性能存在問題。 我不能使用SQL Server來觸發事件,因為如果用戶數量增加,它將鎖定服務器上的線程,因為每個依賴SQL創建的集線器都將調用asych / await。 從理論上講,我真的很想將其作為服務復制到我的應用程序中,但是在弄清楚如何做到這一點上卻一頭霧水。

我有類似的情況:

在我的應用程序中,我有許多客戶端,每個客戶端可以多次登錄。 例如,客戶端A和B,客戶端A1使用PC桌面瀏覽器登錄,同時使用Android手機登錄(我們將其稱為A2)。 使用iPhone登錄客戶端B2,同一客戶端B1 pc桌面瀏覽器處於脫機狀態。

然后,當A1向B發送消息時(不知道B1或B2):

  1. A1調用IIS中的Web服務或webapi來發送消息並將消息存儲在sql中。

  2. A1呼叫信號發送器服務器,告訴服務器從A到B的消息。

  3. signalr Server知道當前A1,A2,B2在線,因此服務器調用A2和B2 Signalr客戶端來更新客戶端頁面。

這里假設A2 Android應用程序。 位於前台並與B聊天,屏幕將更新為與A1同步。

這里假設是B2 iPhone App。 在后台,將生成本地通知,並且在接收到發信人消息時將更新隱藏屏幕,並且B在單擊通知時可以看到更新的消息。

  1. 一段時間后,當使用PC瀏覽器登錄B1時,它將調用webservices或webapi以獲得最新消息。

而已。 我沒有sql觸發器,當沒有新消息時,除了信號器的心跳(僅在連接狀態更改時發生),所有內容都處於空閑狀態。

設計思想是我嘗試將負載放在客戶端,而客戶端則在最早的時間接收消息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM