亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

B/S(Web)實(shí)時(shí)通訊解決方案分享

 更新時(shí)間:2017年04月06日 11:22:51   作者:lining.name  
這篇文章主要為大家分享了B/S(Web)實(shí)時(shí)通訊的解決方案,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

B/S的實(shí)時(shí)通訊實(shí)現(xiàn)起來(lái)比較麻煩,因?yàn)閔ttp協(xié)議是無(wú)狀態(tài)的,導(dǎo)致一些實(shí)時(shí)消息通知和聊天等功能比較難以實(shí)現(xiàn),本文主要簡(jiǎn)述幾種自己之前常用的幾種方式。

1、傳統(tǒng)的HTTP協(xié)議是無(wú)狀態(tài)的

傳統(tǒng)的HTTP協(xié)議是無(wú)狀態(tài)的,每次請(qǐng)求(request)都要由客戶端(如 瀏覽器)主動(dòng)發(fā)起,服務(wù)端進(jìn)行處理后返回response結(jié)果,而服務(wù)端很難主動(dòng)向客戶端發(fā)送數(shù)據(jù),多個(gè)用戶進(jìn)行實(shí)時(shí)的交流也比較困難,比如聊天系統(tǒng)。

2、目前比較流量的實(shí)時(shí)通訊方式

輪詢

條件:任何Web端

客戶端定時(shí)向服務(wù)器發(fā)送Ajax請(qǐng)求,服務(wù)器接到請(qǐng)求后馬上返回響應(yīng)信息并關(guān)閉連接。

長(zhǎng)輪詢

條件:任何Web端

客戶端向服務(wù)器發(fā)送Ajax請(qǐng)求,服務(wù)器接到請(qǐng)求后hold住連接,直到有新消息才返回響應(yīng)信息并關(guān)閉連接,客戶端處理完響應(yīng)信息后再向服務(wù)器發(fā)送新的請(qǐng)求。

Flash socket

條件:需要安裝Flash插件

在頁(yè)面中內(nèi)嵌入一個(gè)使用了Socket類(lèi)的 Flash 程序JavaScript通過(guò)調(diào)用此Flash程序提供的Socket接口與服務(wù)器端的Socket接口進(jìn)行通信,JavaScript在收到服務(wù)器端傳送的信息后控制頁(yè)面的顯示。

Web Socket

條件:支持H5 Web socket

WebSocket protocol 是HTML5一種新的協(xié)議。它實(shí)現(xiàn)了瀏覽器與服務(wù)器全雙工通信(full-duple)。一開(kāi)始的握手需要借助HTTP請(qǐng)求完成。

3、B/S 實(shí)時(shí)通訊輪詢方式

3.1傳統(tǒng)輪詢

客戶端定時(shí)向服務(wù)器發(fā)送Ajax請(qǐng)求,服務(wù)器接到請(qǐng)求后馬上返回響應(yīng)信息并關(guān)閉連接。

缺點(diǎn):耗費(fèi)資源,耗費(fèi)流量 。根據(jù)用戶窗口數(shù)量,請(qǐng)求次數(shù)成倍的增加。

3.2 傳統(tǒng)長(zhǎng)輪詢

客戶端向服務(wù)器發(fā)送Ajax請(qǐng)求,服務(wù)器接到請(qǐng)求后hold住鏈接,直到有新消息才返回響應(yīng)信息并關(guān)閉連接,客戶端處理完響應(yīng)信息后再向服務(wù)器發(fā)送新的請(qǐng)求。

由于瀏覽器同時(shí)只能有一定數(shù)量的鏈接同時(shí)hold,所有這種方式如果窗口打開(kāi)多個(gè),就會(huì)導(dǎo)致后面打開(kāi)的窗口一直等待前面hold的鏈接。

3.3傳統(tǒng)長(zhǎng)輪詢+ActiveMq

ActiveMq的方式相比傳統(tǒng)的查詢數(shù)據(jù)庫(kù)有一定的優(yōu)勢(shì),這樣減少了多次查詢數(shù)據(jù)庫(kù)的問(wèn)題,效率也會(huì)有所提升。但是這種方式每個(gè)用戶的每個(gè)窗口都會(huì)有個(gè)訂閱和鏈接,這樣導(dǎo)致ActiveMq服務(wù)器的鏈接數(shù)會(huì)隨著用戶的增加而增加,最后導(dǎo)致鏈接數(shù)沾滿。

4、ASP.NETSignalR

很明顯輪詢的方式并不是最好的解決方式,當(dāng)然web socket是一種很好的實(shí)現(xiàn)方式,但是編程起來(lái)比較麻煩,由于lz是做.net開(kāi)發(fā),所以選擇了ASP.NET SignalR。而且SignalR會(huì)兼容各種瀏覽器,如果瀏覽器支持web socket,則用web socket方式,如果不支持則用長(zhǎng)輪詢的方式實(shí)現(xiàn)。

ASP.NET SignalR 是為 ASP.NET 開(kāi)發(fā)人員提供的一個(gè)庫(kù),可以簡(jiǎn)化開(kāi)發(fā)人員將實(shí)時(shí) Web 功能添加到應(yīng)用程序的過(guò)程。實(shí)時(shí) Web 功能是指這樣一種功能:當(dāng)所連接的客戶端變得可用時(shí)服務(wù)器代碼可以立即向其推送內(nèi)容,而不是讓服務(wù)器等待客戶端請(qǐng)求新的數(shù)據(jù)。即你有信息了再來(lái)通知我,而不是我傻乎乎的每次跑來(lái)問(wèn)你。

http://signalr.net/

4.1 SignalR 簡(jiǎn)單編程

SignalR的配置以及應(yīng)用詳情可以參數(shù)官方文檔,這里只做簡(jiǎn)單的發(fā)送消息和接收消息的示例。

1、客戶端發(fā)送消息至服務(wù)端

2、服務(wù)端發(fā)送消息至客戶端

在服務(wù)端向客戶端發(fā)送消息時(shí)可以選擇三種發(fā)送方式

1、All:所有頁(yè)面,比如:實(shí)時(shí)股票信息。

  Clients.All.xx();

2、Client:?jiǎn)蝹€(gè)頁(yè)面,比如:聊天系統(tǒng)。

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

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

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

更多關(guān)于SignalR的詳情介紹,和實(shí)現(xiàn)群聊功能,可以參考另一篇 應(yīng)用并實(shí)現(xiàn)群聊功能 開(kāi)源代碼

4.2 SignalR+數(shù)據(jù)庫(kù)

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

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

這種方式既解決了鏈接數(shù)的問(wèn)題,也同時(shí)解決了用戶多個(gè)窗口不能收到消息的問(wèn)題,而且用了ActiveMq也不用去實(shí)時(shí)刷新數(shù)據(jù)庫(kù)。

結(jié)語(yǔ)

以上是lz在開(kāi)發(fā)中應(yīng)用的多種B/S實(shí)時(shí)通信的解決方案,望對(duì)各位有所幫助,本文原創(chuàng),歡迎拍磚和推薦。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Fullpage.js固定導(dǎo)航欄-實(shí)現(xiàn)定位導(dǎo)航欄

    Fullpage.js固定導(dǎo)航欄-實(shí)現(xiàn)定位導(dǎo)航欄

    FullPage.js 是一個(gè)簡(jiǎn)單而易于使用的插件,用來(lái)創(chuàng)建全屏滾動(dòng)網(wǎng)站(也被稱為單頁(yè)網(wǎng)站)。接下來(lái)通過(guò)本文給大家介紹Fullpage.js固定導(dǎo)航欄-實(shí)現(xiàn)定位導(dǎo)航欄,對(duì)fullpage.js導(dǎo)航欄相關(guān)知識(shí)感興趣的朋友一起學(xué)習(xí)吧
    2016-03-03
  • JS獲取當(dāng)前日期和時(shí)間的簡(jiǎn)單實(shí)例

    JS獲取當(dāng)前日期和時(shí)間的簡(jiǎn)單實(shí)例

    這篇文章主要介紹了JS獲取當(dāng)前日期和時(shí)間的簡(jiǎn)單實(shí)例,有需要的朋友可以參考一下
    2013-11-11
  • JavaScript庫(kù) 開(kāi)發(fā)規(guī)則

    JavaScript庫(kù) 開(kāi)發(fā)規(guī)則

    1. 保持無(wú)侵入性,標(biāo)記不想知道你的JavaScript代碼;2. 嚴(yán)禁修改和擴(kuò)展Object.prototype!;3. 對(duì)JavaScript內(nèi)建對(duì)象的擴(kuò)展越少越好;4. 跟隨標(biāo)準(zhǔn);5. 或著跟隨主導(dǎo) ;6. 保持靈活;7. 管理內(nèi)存;8. 淘汰瀏覽器嗅探;9. 小巧更佳……
    2009-01-01
  • 用js實(shí)現(xiàn)小球的自由移動(dòng)代碼

    用js實(shí)現(xiàn)小球的自由移動(dòng)代碼

    本篇文章小編為大家介紹,用js實(shí)現(xiàn)小球的自由移動(dòng)代碼。需要的朋友參考下
    2013-04-04
  • 從延遲處理解析JavaScript惰性編程

    從延遲處理解析JavaScript惰性編程

    這篇文章主要為大家介紹了從延遲處理解析JavaScript惰性編程示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-10-10
  • 微信小程序request請(qǐng)求封裝,驗(yàn)簽代碼實(shí)例

    微信小程序request請(qǐng)求封裝,驗(yàn)簽代碼實(shí)例

    這篇文章主要介紹了微信小程序request請(qǐng)求封裝,驗(yàn)簽代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-12-12
  • 中文字符串截取的js函數(shù)代碼

    中文字符串截取的js函數(shù)代碼

    有時(shí)在顯示某段文字的時(shí)候,可能會(huì)太長(zhǎng),影響我們頁(yè)面的顯示效果,如果僅是英文,那么我們可以用String.substring(start, end)函數(shù)就已經(jīng)夠用了,但是通常我們都會(huì)遇到既有英文,又有漢字的情況
    2013-04-04
  • JS判斷微信掃碼的方法

    JS判斷微信掃碼的方法

    這篇文章通過(guò)代碼給大家介紹了JS判斷是否是微信掃碼的方法,非常不錯(cuò),需要的朋友參考下吧
    2017-08-08
  • js添加類(lèi)名的兩種方法

    js添加類(lèi)名的兩種方法

    這篇文章主要介紹了js添加類(lèi)名的兩種方法,一種是通過(guò)className來(lái)添加、刪除類(lèi)名,另一種是通過(guò)classList來(lái)添加、刪除類(lèi)名,感興趣的朋友跟隨小編一起看看吧
    2023-11-11
  • 利用Js+Css實(shí)現(xiàn)折紙動(dòng)態(tài)導(dǎo)航效果實(shí)例源碼

    利用Js+Css實(shí)現(xiàn)折紙動(dòng)態(tài)導(dǎo)航效果實(shí)例源碼

    這篇文章主要給大家介紹了利用Js+Css實(shí)現(xiàn)折紙動(dòng)態(tài)導(dǎo)航的效果,實(shí)現(xiàn)后的效果非常不錯(cuò),文中給出了簡(jiǎn)單的介紹和完整的實(shí)例代碼,對(duì)大家具有一定的參考價(jià)值,有需要的朋友們下面來(lái)一起看看吧。
    2017-01-01

最新評(píng)論