欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

flutter協(xié)議,flutter flutter

Flutter 之 WebSockets (三十一)

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。

flutter與原生交互方法和底層原理分析

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):

Flutter開發(fā)——socket+udp通信

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)

外貿網站制作