Http協(xié)議是無狀態(tài)的,只能由客戶端主動發(fā)起,服務端再被動響應,服務端無法向客戶端主動推送內容,并且一旦服務器響應結束,鏈接就會斷開所以無法進行實時通信。WebSocket協(xié)議正是為解決客戶端與服務端實時通信而產生的技術,現(xiàn)在已經被主流瀏覽器支持。目前 Flutter也提供了專門的包來支持WebSocket協(xié)議。

成都創(chuàng)新互聯(lián)專注于中山網站建設服務及定制,我們擁有豐富的企業(yè)做網站經驗。 熱誠為您提供中山營銷型網站建設,中山網站制作、中山網頁設計、中山網站官網定制、小程序定制開發(fā)服務,打造中山網絡公司原創(chuàng)品牌,更為您提供中山網站排名全網營銷落地服務。
web_socket_channel package 提供了我們需要連接到WebSocket服務器的工具。該package提供了一個 WebSocketChannel 允許我們既可以監(jiān)聽來自服務器的消息,又可以將消息發(fā)送到服務器的方法。
執(zhí)行flutter pub get 命令,即可
1. 連接到WebSocket服務器
2. 監(jiān)聽來自服務器的消息
使用一個 StreamBuilder 來監(jiān)聽新消息, 并用一個Text來顯示它們
工作原理
WebSocketChannel 提供了一個來自服務器的消息 Stream 。該 Stream 類是 dart:async 包中的一個基礎類。它提供了一種方法來監(jiān)聽來自數(shù)據(jù)源的異步事件。與 Future 返回單個異步響應不同, Stream 類可以隨著時間推移傳遞很多事件。該 StreamBuilder 組件將連接到一個 Stream , 并在每次收到消息時通知Flutter重新構建界面
3. 將數(shù)據(jù)發(fā)送到服務器
為了將數(shù)據(jù)發(fā)送到服務器,我們會add消息給WebSocketChannel提供的sink。
WebSocketChannel 提供了一個 StreamSink ,它將消息發(fā)給服務器
StreamSink 類提供了給數(shù)據(jù)源同步或異步添加事件的一般方法
4. 關閉WebSocket連接
思考:
假如我們想通過WebSocket傳輸二進制數(shù)據(jù)應該怎么做(比如要從服務器接收一張圖片)?我們發(fā)現(xiàn)StreamBuilder和Stream都沒有指定接收類型的參數(shù),并且在創(chuàng)建WebSocket鏈接時也沒有相應的配置,貌似沒有什么辦法……其實很簡單,要接收二進制數(shù)據(jù)仍然使用StreamBuilder,因為WebSocket中所有發(fā)送的數(shù)據(jù)使用幀的形式發(fā)送,而幀是有固定格式,每一個幀的數(shù)據(jù)類型都可以通過Opcode字段指定,它可以指定當前幀是文本類型還是二進制類型(還有其它類型),所以客戶端在收到幀時就已經知道了其數(shù)據(jù)類型,所以flutter完全可以在收到數(shù)據(jù)后解析出正確的類型,所以就無需開發(fā)者去關心,當服務器傳輸?shù)臄?shù)據(jù)是指定為二進制時,StreamBuilder的snapshot.data的類型就是Listint,是文本時,則為String。
1.環(huán)境準備, 參考鏈接
2.添加國內環(huán)境配置: 參考鏈接
3.新建
name: String類型,代表Channel的名字,也是其唯一標識符。
messager:BinaryMessenger類型,代表消息信使,是消息的發(fā)送與接收的工具。
codec: MessageCodec類型或MethodCodec類型,代表消息的編解碼器。
fluuter中的MessageCodec用于二進制格式數(shù)據(jù)與基礎數(shù)據(jù)之間的編解碼。BasicMessageChannel所使用的編解碼器就是MessageCodec。
iOS中,名稱為FlutterMessageCodec,是一個協(xié)議,定義了兩個方法:encode接收一個類型為id的消息,將其編碼為NSData類型,而decode接收NSData類型消息,將其解碼為id類型數(shù)據(jù)。
MessageCodec有多種不同的實現(xiàn):
與MessageCodec不同的是,MethodCodec用于MethodCall對象的編解碼,一個MethodCall對象代表一次從Flutter端發(fā)起的方法調用。MethodCall有2個成員變量:String類型的method代表需要調用的方法名稱,通用類型(Android中為Object,iOS中為id)的arguments代表需要調用的方法入?yún)?/p>
由于處理的是方法調用,故相比于MessageCodec,MethodCodec多了對調用結果的處理。當方法調用成功時,使用encodeSuccessEnvelope將result編碼為二進制數(shù)據(jù),而當方法調用失敗時,則使用encodeErrorEnvelope將error的code、message、detail編碼為二進制數(shù)據(jù)
MethodCodec有兩種實現(xiàn):
Android平臺使用CoAP通信綁定設備 已在前文中介紹,目前需要從Android平臺遷移到Linux平臺,flutter提供的CoAP協(xié)議包只提供了客戶端而沒有服務端,在進行設備綁定時,設備不僅要作為服務端,也要作為客戶端接收底層的消息推送,嘗試實現(xiàn)socket+udp通信模塊。
新聞標題:flutter協(xié)議,flutter flutter
當前鏈接:http://chinadenli.net/article17/dsisjdj.html
成都網站建設公司_創(chuàng)新互聯(lián),為您提供搜索引擎優(yōu)化、網站建設、網頁設計公司、外貿建站、定制開發(fā)、虛擬主機
聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)