中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

web開發中B/S實時通訊的示例分析

發布時間:2021-08-02 14:53:39 來源:億速云 閱讀:162 作者:小新 欄目:web開發

這篇文章主要介紹了web開發中B/S實時通訊的示例分析,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

B/S的實時通訊實現起來比較麻煩,因為http協議是無狀態的,導致一些實時消息通知和聊天等功能比較難以實現,本文主要簡述幾種自己之前常用的幾種方式。

1、傳統的HTTP協議是無狀態的

傳統的HTTP協議是無狀態的,每次請求(request)都要由客戶端(如 瀏覽器)主動發起,服務端進行處理后返回response結果,而服務端很難主動向客戶端發送數據,多個用戶進行實時的交流也比較困難,比如聊天系統。

web開發中B/S實時通訊的示例分析

2、目前比較流量的實時通訊方式

輪詢

條件:任何Web端

客戶端定時向服務器發送Ajax請求,服務器接到請求后馬上返回響應信息并關閉連接。

長輪詢

條件:任何Web端

客戶端向服務器發送Ajax請求,服務器接到請求后hold住連接,直到有新消息才返回響應信息并關閉連接,客戶端處理完響應信息后再向服務器發送新的請求。

Flash socket

條件:需要安裝Flash插件

在頁面中內嵌入一個使用了Socket類的 Flash 程序JavaScript通過調用此Flash程序提供的Socket接口與服務器端的Socket接口進行通信,JavaScript在收到服務器端傳送的信息后控制頁面的顯示。

Web Socket

條件:支持H5 Web socket

WebSocket protocol 是HTML5一種新的協議。它實現了瀏覽器與服務器全雙工通信(full-duple)。一開始的握手需要借助HTTP請求完成。

3、B/S 實時通訊輪詢方式

3.1傳統輪詢

客戶端定時向服務器發送Ajax請求,服務器接到請求后馬上返回響應信息并關閉連接。

缺點:耗費資源,耗費流量 。根據用戶窗口數量,請求次數成倍的增加。

web開發中B/S實時通訊的示例分析

3.2 傳統長輪詢

客戶端向服務器發送Ajax請求,服務器接到請求后hold住鏈接,直到有新消息才返回響應信息并關閉連接,客戶端處理完響應信息后再向服務器發送新的請求。

由于瀏覽器同時只能有一定數量的鏈接同時hold,所有這種方式如果窗口打開多個,就會導致后面打開的窗口一直等待前面hold的鏈接。

web開發中B/S實時通訊的示例分析

3.3傳統長輪詢+ActiveMq

ActiveMq的方式相比傳統的查詢數據庫有一定的優勢,這樣減少了多次查詢數據庫的問題,效率也會有所提升。但是這種方式每個用戶的每個窗口都會有個訂閱和鏈接,這樣導致ActiveMq服務器的鏈接數會隨著用戶的增加而增加,最后導致鏈接數沾滿。

web開發中B/S實時通訊的示例分析

4、ASP.NETSignalR

很明顯輪詢的方式并不是最好的解決方式,當然web socket是一種很好的實現方式,但是編程起來比較麻煩,由于lz是做.net開發,所以選擇了ASP.NET SignalR。而且SignalR會兼容各種瀏覽器,如果瀏覽器支持web socket,則用web socket方式,如果不支持則用長輪詢的方式實現。

ASP.NET SignalR 是為 ASP.NET 開發人員提供的一個庫,可以簡化開發人員將實時 Web 功能添加到應用程序的過程。實時 Web 功能是指這樣一種功能:當所連接的客戶端變得可用時服務器代碼可以立即向其推送內容,而不是讓服務器等待客戶端請求新的數據。即你有信息了再來通知我,而不是我傻乎乎的每次跑來問你。

http://signalr.net/

web開發中B/S實時通訊的示例分析

4.1 SignalR 簡單編程

SignalR的配置以及應用詳情可以參數官方文檔,這里只做簡單的發送消息和接收消息的示例。

1、客戶端發送消息至服務端

web開發中B/S實時通訊的示例分析

2、服務端發送消息至客戶端

web開發中B/S實時通訊的示例分析

在服務端向客戶端發送消息時可以選擇三種發送方式

1、All:所有頁面,比如:實時股票信息。

  Clients.All.xx();

2、Client:單個頁面,比如:聊天系統。

  Clients.Client("connectionId").xx();

3、Group:組,比如:同一個用戶所有頁面收到通知。

  Clients.Group("groupName").xx();

更多關于SignalR的詳情介紹,和實現群聊功能,可以參考另一篇 應用并實現群聊功能 開源代碼

4.2 SignalR+數據庫

這種方式解決了用戶多個窗口不能收到消息的問題,而且數據庫的刷新頻率只會有一個線程刷新,并不會隨著用戶的增加而增加,從而大大的減小了數據庫的刷新頻率。

web開發中B/S實時通訊的示例分析

4.3SignalR+ActiveMq(最終解決方式)

這種方式既解決了鏈接數的問題,也同時解決了用戶多個窗口不能收到消息的問題,而且用了ActiveMq也不用去實時刷新數據庫。

web開發中B/S實時通訊的示例分析

感謝你能夠認真閱讀完這篇文章,希望小編分享的“web開發中B/S實時通訊的示例分析”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

西和县| 商水县| 阜平县| 孟州市| 刚察县| 钟山县| 诸暨市| 北票市| 民乐县| 长春市| 肃宁县| 荆州市| 册亨县| 土默特右旗| 乳源| 普陀区| 资中县| 海兴县| 常熟市| 东莞市| 尼玛县| 玉田县| 长宁区| 涡阳县| 洪湖市| 老河口市| 新营市| 五原县| 阜平县| 历史| 曲麻莱县| 东光县| 玉屏| 田东县| 阿荣旗| 伊吾县| 永丰县| 无极县| 新蔡县| 呼图壁县| 胶南市|