freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

基于websocket的異構(gòu)應用協(xié)同服務設計與實現(xiàn)(參考版)

2025-06-21 17:15本頁面
  

【正文】 ClientSession類實現(xiàn)了Session接口,用于表示普通客戶端會話,在ClientSession中,保持了會話IP白名單、會話相應的認證碼、是否已經(jīng)初始化、是否可用、是否接受歷史消息、私有列表等屬性,提供了自己特有的會話創(chuàng)建、銷毀方法,以及自己特有屬性的設置和獲取方式,以及其它相關(guān)的特殊屬性和方法。普通客戶端會話類用于通過Socket方式連接的客戶端,HTTP客戶端會話類用于通過BOSH連接的客戶端。(8) 驗證連接是否有效:主動調(diào)用以驗證連接是否異常斷開。(6) 發(fā)送數(shù)據(jù)包:按照不同的數(shù)據(jù)包和不同的會話,對收發(fā)的數(shù)據(jù)包進行處理與發(fā)送。(4) 數(shù)據(jù)包處理總量:會話每處理一個數(shù)據(jù)包,就將數(shù)據(jù)包的大小累加,以便統(tǒng)計。(2) 設置和獲取各種變量:對會話創(chuàng)建時間、創(chuàng)建用戶等等屬性提供賦值和取值操作。(7) 本次會話是否可用:本次會話是否正常運行。(5) 服務器名稱:指代服務器域名。(3) 會話當前狀態(tài):用于標識會話用戶當前的狀態(tài),包括在線、離開、離線等。包括的主要變量有:(1) 產(chǎn)生會話的用戶:標記發(fā)起本次會話的用戶,在用戶發(fā)送和接收XMPP節(jié)時尋找相應用戶。WSConnection代表了一條WebSocket連接,將XMPPWebSocket實體類與服務的Connection模塊進行整合,為服務器增加了處理WebSocket通信的能力。HttpConnection代表了一次Http連接。Connection模塊如下圖所示: Connection模塊類圖其中,Connection接口為總接口,代表了服務器中保持的一個連接,規(guī)定了檢查連接是否存在、初始化連接、獲取連接相關(guān)屬性屬性(客戶端ip地址、服務器ip地址、服務器名等)、關(guān)閉連接、處理監(jiān)聽器、發(fā)送數(shù)據(jù)包等方法。(5) 以文本形式發(fā)送數(shù)據(jù)包:將需要發(fā)送的數(shù)據(jù)包以文本的形式發(fā)送。(3) 獲取相關(guān)屬性:獲取此連接的相關(guān)屬性,包括ip地址、域名、連接是否關(guān)閉等屬性。包括的主要方法有:(1) 確認連接:在兩個實體之間發(fā)送一個空格,來確認連接是否仍然有效。FrameConnection接口類對Connection接口類進行了擴充,主要是用來操作幀一級的連接信息。在Connection模塊中,主要處理WebSocket連接相關(guān)業(yè)務。兩個接口模塊的功能如下表所示: WebSocket接口一覽表模塊名接口名接口用途W(wǎng)ebSocket模塊WebSocket連接打開、關(guān)閉時通知OnTextMessage接收文本消息時通知OnBinaryMessage接收二進制消息時通知OnControl接收控制消息時通知OnFrame接收幀級信息時通知Connection模塊Connection處理WebSocket連接相關(guān)業(yè)務FrameConnection處理WebSocket連接中幀一級相關(guān)業(yè)務在WebSocket模塊中,定義了onOpen(Connection connection)和onClose(int closeCode,String message)兩個回調(diào)方法。然后通過WebSocketParserRFC6455來對request進行解析,最后通過WebSocketGenerator生成符合協(xié)議要求格式的數(shù)據(jù),發(fā)送到通道中,也就開始了發(fā)送和接收數(shù)據(jù)。建立連接的過程如下圖所示: WebSocket建立過程當客戶端請求建立WebSocket連接后,向Jetty服務器首先發(fā)出協(xié)議格式的連接 request,當Jetty服務器收到 request后,會查詢是否需要升級到WebSocket 連接,如果客戶端發(fā)出的 request中包含升級到WebSocket的請求,則會通過servlet處理后返回一個同意升級到WebSocket的 response。WebSocketConnectionRFC6455實現(xiàn)了連接,類似HTTP協(xié)議中的HttpConnection。jetty自身已經(jīng)擁有對于HTTP的支持,可以處理HTTP request和HTTP response,可以方便地處理客戶端開始進行WebSocket握手時所發(fā)送的HTTP request信息,對其進行解析、返回WebSocket握手response并且建立WebSocket連接。HttpListener和HttpServer如下圖所示: HttpListener接口HttpContext是具體處理每個客戶端請求的虛擬機,其子類中包含許多HttpHandler。不同的實現(xiàn)類會有不同的處理功能,主要有用于處理靜態(tài)內(nèi)容的ResourceHandler、用于提供安全驗證的SecurityHandler、用于轉(zhuǎn)發(fā)request的ForwardHandler、用于交付request到servlet的ServletHandler等。接收從監(jiān)聽器HttpListener中監(jiān)聽到的Http請求(HttpRequest),通過對Http請求的路徑和主機進行匹配分析,將其發(fā)送給對應的HttpContext。 jetty的構(gòu)造Jetty有四個主要的功能部分,分別是HttpServer、HttpHandler、HttpContext、HttpListener,主要關(guān)系如下圖所示。對于將會生成并且保持大量連接的應用,Jetty更具有優(yōu)勢。當前流行的開源應用服務器有Jetty和Tomcat兩種,兩種服務器都已經(jīng)對WebSocket提供了支持,為用戶封裝了簡易的使用接口。整個服務的數(shù)據(jù)流程如下圖所示: 服務器信息流向 服務器實現(xiàn) 應用服務器選擇 Tomcat與Jetty基于WebSocket的異構(gòu)應用協(xié)同服務如果要支持BOSH或者WebSocket,必須要能處理瀏覽器所發(fā)送的request,返回相應的response。Message信息交由Message處理模塊處理,IQ信息交由IQ處理模塊處理,Presence信息交由Presence模塊處理。一旦會話建立,就開始進行協(xié)同數(shù)據(jù)的收發(fā)。服務器模塊圖如下圖所示: 服務器模塊圖當客戶端向服務器發(fā)起連接請求時,通過服務器連接層不同的連接模塊進行連接。其中連接層處理各種不同協(xié)議下的連接,根據(jù)不同的協(xié)議,提供不同的方法,通過相應連接來收發(fā)消息;會話層將連接轉(zhuǎn)換為對應的用戶會話,通過調(diào)用連接層提供的消息收發(fā)方法,將需要發(fā)送到相應用戶的協(xié)同信息發(fā)送到會話對應的用戶,或者接收用戶發(fā)送的協(xié)同信息;消息處理層又分為三大類,分別處理Message格式的XMPP信息、Presence格式的XMPP信息和IQ格式的XMPP信息,根據(jù)不同信息的特點,交由底層邏輯層不同的模塊進行處理。router有三種,分別是處理Message類型消息的Message Router、處理Presence類型消息的Presence Router和處理IQ類型信息的IQ Router。如下圖所示: 服務器分層結(jié)構(gòu)在一個完整的服務流程中,異構(gòu)應用服務器監(jiān)聽不同協(xié)議下需要監(jiān)聽的信息接收端口,當有相應的客戶端發(fā)起連接請求時,服務器新建一個連接,同時確認是否新建一個會話(因為在采用BOSH時新建的連接可能已經(jīng)有相應的會話存在)。綜上所述,本服務決定采取分層設計,以提供良好的可擴展性。連接提供了底層的、面向IO的數(shù)據(jù)接收和發(fā)送方法。在客戶端服務器系統(tǒng)中,連接處于更低一層,會話處于更高一層。 服務器設計在用戶協(xié)同過程中,用戶首先打開客戶端,通過客戶端申請連接到服務器,服務器同意連接后,會視客戶端登陸用戶的具體情況生成一個標記客戶端用戶登陸的會話,以標志客戶端用戶已經(jīng)可用,接下來,就可以為用戶收發(fā)協(xié)同信息提供服務。(3) WebSocketWebSocket協(xié)議是HTML4中新定義的一中協(xié)議,其最大的特點是實現(xiàn)了瀏覽器與服務器之間的全雙工通信[11]。(2) BOSHBOSH是Bidirectionalstreams Over Synchronous HTTP的簡稱,是一種利用同步HTTP協(xié)議來模擬客戶端和服務器端雙向信息傳輸?shù)膮f(xié)議,相對于AJAX等技術(shù)更加高效和節(jié)約資源。NIO即new IO,可以為在傳輸過程中使用到的原始java數(shù)據(jù)類型提供緩存支持,支持鎖,支持內(nèi)存映射文件,為程序提供多路、非阻塞的I/O,讓網(wǎng)絡I/O擁有更高的可伸縮性。對于B/S架構(gòu)下的應用,傳統(tǒng)的BOSH等技術(shù)比較常見,WebSocket作為一種新興的全雙工通信技術(shù)也會在不久的將來占據(jù)重要地位。綜上所述,協(xié)同服務需要有三個主要需求:(1) 對WebSocket有良好的支持(2) 對多種環(huán)境下的客戶端有良好的支持(3) 有良好的擴展性另外,為了能夠達到應用之間的有效協(xié)同,還必須完成一些基礎需求,包括以下幾點:(1) 對客戶端連接和會話的保持和處理(2) 對客戶端發(fā)送信息的正確解析(3) 對客戶端發(fā)送信息的正確處理(4) 對客戶端發(fā)送信息的正確轉(zhuǎn)發(fā)(5) 客戶端的驗證(6) 多人協(xié)同的處理方式 所需支持的協(xié)議應用一般分為C/S架構(gòu)下的應用和B/S架構(gòu)下的應用兩種。另外,隨著網(wǎng)絡環(huán)境的不斷完善,越來越多的人開始習慣直接通過瀏覽器來處理一些日常事務,而不是通過笨重的客戶端,隨著WebSocket的問世與發(fā)展,其全雙工、高效率的特性,也讓越來越多的服務器開始對其進行支持,也有越來越多的客戶端開始采用WebSocket。不同的應用之間如果要進行協(xié)同工作,就需要構(gòu)建一個支持多種應用的協(xié)同系統(tǒng)。當多人進行協(xié)同的時候,就會遇到問題。從古老的linux到一統(tǒng)天下的windows,再到逐漸火熱的mac os,從臺式機到包括手機在內(nèi)的各種手持終端,人們有越來越多的方式來完成同一件工作。對擴展的說明如下所示:SecWebSocketExtensions:extensionone第4章 第四章 協(xié)同服務設計與實現(xiàn) 需求分析 異構(gòu)應用協(xié)同服務需求分析隨著技術(shù)的不斷發(fā)展,越來越多終端設備、操作系統(tǒng)不斷涌現(xiàn)。在網(wǎng)絡層中,我們使用SecWebSocketProtocol首標來進行協(xié)商,應用層高層協(xié)議的名稱可以在客戶端發(fā)起連接、對普通HTTP連接進行升級的時候用首標來進行表示,如下所示:SecWebSocketProtocol:protocolone,protocoltwo.這個首標表示客戶端方面同時支持protocolone和protocoltwo兩種協(xié)議,服務器可以視自己的支持能力和實際情況來選擇其中任何一個協(xié)議作為應用層高層協(xié)議,在服務器的響應中通知客戶端,如下所示:SecWebSocketProtocol:protocolone另外WebSocket協(xié)議也支持對本協(xié)議的擴展。 WebSocket子協(xié)議WebSocket協(xié)議處于應用層的底層,可以支持其他應用層協(xié)議通過WebSocket協(xié)議進行發(fā)送處理。當客戶端或服務器出現(xiàn)問題而關(guān)閉時,發(fā)送此數(shù)據(jù),然后關(guān)閉連接。當客戶端或者服務器試圖使用WebSocket傳輸不支持的其他上層應用層協(xié)議時,就會發(fā)送此數(shù)據(jù),然后關(guān)閉連接。1010:表示當前不支持此擴展協(xié)議。1009:表示消息超長。1008:表示消息違反規(guī)定。1007:表示無效數(shù)據(jù)。1003:表示不可接受的數(shù)據(jù)類型。1002:表示協(xié)議錯誤。1001:表示為離開。此外RCF6455還定義了一些固定的、常見的關(guān)閉原因代碼,來表示關(guān)閉WebSocket連接的原因,具體如下:1000:表示正常關(guān)閉。終止連接的一方會發(fā)送特定的數(shù)字代碼,在幀的數(shù)據(jù)負載部分可以選擇是否寫入關(guān)閉原因。(5) 數(shù)據(jù)負載數(shù)據(jù)負載承載了WebSocket幀中的有效數(shù)據(jù),在發(fā)送文本消息時,WebSocket使用UTF8進行編碼。擴展長度的后四個字節(jié)則將會倍填充屏蔽數(shù)據(jù)。如果消息長度大于126個字節(jié)并且小于216個字節(jié),則擴展長度占用的字節(jié)數(shù)為2;當一條消息的長度大于216字節(jié)的時候,擴展長度占用的字節(jié)數(shù)為8.(4) 屏蔽屏蔽只存在于客戶端(即瀏覽器)向服務器發(fā)送的WebSocket幀之中,來對其內(nèi)容進行一定程度的混淆,以達到一定程度的安全目的、兼容HTTP、防止跨協(xié)議攻擊。長度數(shù)據(jù)塊只使用后七位來表示長度,126和127兩個值用來表示是否需要使用擴展長度。長度數(shù)據(jù)塊占有一個字節(jié),其功能就是標注本次消息的大小。如果所發(fā)送的消息不超過這個最大值,則每一幀的大小會隨著消息的大小變化而變化。以上為已經(jīng)定義的幾種操作碼,尚未定義的操作碼留給以后版本使用。1000:表示本條消息為關(guān)閉握手,代表客戶端向者服務器或者服務器向客戶端發(fā)送的關(guān)閉握手1001:表示ping消息,代表客戶端和服務器之間發(fā)送的心跳信息。根據(jù)后四位的不同,表示如下:0001:表示本條消息為文本消息,數(shù)據(jù)類型為文本。 WebSocket幀結(jié)構(gòu)在大多數(shù)情況下,WebSocket的每一個幀都完整地承載著一條WebSocket消息,很少會出現(xiàn)一條消息由多個WebSocket幀承載的情況,當然這也不是完全沒有可能。在這個握手過程中,最重要的是客戶端發(fā)送的HTTP頭中的SecWebSocketKey和與之相應的服務器返回的HTTP響應中的SecWebSocketAccep。 WebSocket握手信息WebSocket握手信息以HTTP形式發(fā)送,遵循HTTP/,客戶端發(fā)送的HTTP頭部如下:GET /echo HTTP/Host:Origin:SecWebSocketKey:your websocket sec keySecWebSocketVersion:13Upgrade。其握手過程如圖3所示: WebSocket握手過程WebSocket
點擊復制文檔內(nèi)容
醫(yī)療健康相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1