91在线观看视频-91在线观看视频-91在线观看免费视频-91在线观看免费-欧美第二页-欧美第1页

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

鴻蒙上WebSocket的使用方法

OpenHarmony技術社區 ? 來源:OST開源開發者 ? 2023-03-08 14:17 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

WebSocket 是一種網絡通訊協議,很多網絡開發工作者都需要它。本文介紹在 OpenHarmony 上 WebSocket 協議的使用方法。

WebSocket 有什么不同

很多人會問,有了 HTTP 協議,尤其是 RESTFul 接口,為什么還需要使用 WebSocket?它能帶來什么好處呢?那是因為 HTTP 協議有一個缺陷,通訊只能由客戶端發起。

簡單舉例,我們的天氣應用程序需要查詢天氣就需要客戶端向服務器請求數據,服務器查詢后返回結果。

但是如果天氣有變化,客戶端是無法收到服務端推送過來的消息,所以只能定時調用或者用戶手動刷新。

這種單向請求導致需要雙向通訊的應用只能在客戶端采用輪詢的手段來實現,引申出來的問題就是效率低,服務端負載大。所以就誕生了 WebSocket。

WebSocket 簡介

WebSocket 協議誕生于 2008 年,2011 年成為國際標準,所有瀏覽器都支持。它最大的特點就是雙向平等對話,屬于服務器推送技術的一種。

HTTP 流程:

0bf3842c-b9cf-11ed-bfe3-dac502259ad0.png

WebSocket 流程:

0c0aee8c-b9cf-11ed-bfe3-dac502259ad0.png

特點:

在 TCP 協議上層,服務器端的實現比較容易。

與HTTP 協議有著良好的兼容性。默認端口也是 80 和 443,并且握手階段采用 HTTP 協議,因此握手時不容易屏蔽,能通過各種 HTTP 代理服務器。

數據格式比較輕量,性能開銷小,通信高效。

可發送文本,也可發送二進制數據。

沒有同源限制,客戶端可以與任意服務器通信。

協議標識符是 ws(如果加密,則為 wss),服務器網址就是 URL。

0c2e912a-b9cf-11ed-bfe3-dac502259ad0.png

WebSocket在OpenHarmony上的實現

如下圖:

0c5c011e-b9cf-11ed-bfe3-dac502259ad0.png

WebSocket在OpenHarmony上的使用

導入 d.ts 文件:

//導入websocket接口
importwebSocketfrom'@ohos.net.webSocket'
//websocket的基本接口函數
connect(url:string,callback:AsyncCallback):void;
send(data:string|ArrayBuffer,callback:AsyncCallback):void;
close(callback:AsyncCallback):void;
基本的 websocket 流程:
letpromise=socket.connect(url)
promise.then((value)=>{
Logger.info(TAG,`connectsuccess`)
}).catch((err)=>{
Logger.info(TAG,`connectfail,error:${JSON.stringify(err)}`)
})
socket.on('open',(err,value)=>{
prompt.showToast({message:'連接成功',duration:1500})
})
socket.on('message',(err,value)=>{
Logger.info(TAG,`onmessage,value=${value}`)
})

Framework層的實現

Napi 接口實現:

//foundation/communication/netstack/frameworks/js/napi/websocket/websocket_module/src/websocket_module.cpp
std::initializer_listproperties={
DECLARE_NAPI_FUNCTION(WebSocket::FUNCTION_CONNECT,WebSocket::Connect),
DECLARE_NAPI_FUNCTION(WebSocket::FUNCTION_SEND,WebSocket::Send),
DECLARE_NAPI_FUNCTION(WebSocket::FUNCTION_CLOSE,WebSocket::Close),
DECLARE_NAPI_FUNCTION(WebSocket::FUNCTION_ON,WebSocket::On),
DECLARE_NAPI_FUNCTION(WebSocket::FUNCTION_OFF,WebSocket::Off),
};
ModuleTemplate::DefineClass(env,exports,properties,INTERFACE_WEB_SOCKET);
異步執行動作:
//foundation/communication/netstack/frameworks/js/napi/websocket/async_work/src/websocket_async_work.cpp
//初始化libwebsocket需要的callback
staticconstlws_protocolsLWS_PROTOCOLS[]={
{"lws-minimal-client",WebSocketExec::LwsCallback,0,0},
{nullptr,nullptr,0,0},//thislineisneeded
};

//填裝websocket上下文信息
staticinlinevoidFillContextInfo(lws_context_creation_info&info)
{
info.options=LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT;
info.port=CONTEXT_PORT_NO_LISTEN;
info.protocols=LWS_PROTOCOLS;
info.fd_limit_per_thread=FD_LIMIT_PER_THREAD;
}

voidWebSocketAsyncWork::ExecConnect(napi_envenv,void*data)
{
BaseAsyncWork::ExecAsyncWork(env,data);
}

voidWebSocketAsyncWork::ExecSend(napi_envenv,void*data)
{
BaseAsyncWork::ExecAsyncWork(env,data);
}

voidWebSocketAsyncWork::ExecClose(napi_envenv,void*data)
{
BaseAsyncWork::ExecAsyncWork(env,data);
}
執行結果日志打印:
//正確連接
IC015b0/NetMgrSubsystem:NETSTACK[connect_context.cpp43]ConnectContextNapiUtils::GetValueType(GetEnv(),params[1])==napi_function
IC015b0/NetMgrSubsystem:NETSTACK[module_template.h61]jsparamsparseOK?1
IC015b0/NetMgrSubsystem:NETSTACK[websocket_exec.cpp471]beginconnect,parseurl
EC015b0/NetsysNativeService:[HookSocket-(netsys_sock_client.cpp:45)]muslcreatesocketfailed
IC015b0/NetMgrSubsystem:NETSTACK[websocket_exec.cpp228]startservice
IC015b0/NetMgrSubsystem:NETSTACK[websocket_exec.cpp533]ConnectCallbackconnectsuccess

//錯誤連接
IC015b0/NetMgrSubsystem:NETSTACK[connect_context.cpp43]ConnectContextNapiUtils::GetValueType(GetEnv(),params[1])==napi_function
IC015b0/NetMgrSubsystem:NETSTACK[module_template.h61]jsparamsparseOK?1
IC015b0/NetMgrSubsystem:NETSTACK[websocket_exec.cpp471]beginconnect,parseurl
EC015b0/NetsysNativeService:[HookSocket-(netsys_sock_client.cpp:45)]muslcreatesocketfailed
IC015b0/NetMgrSubsystem:NETSTACK[websocket_exec.cpp358]LwsCallbackClientConnectionErrorDNSNXDOMAIN
IC015b0/NetMgrSubsystem:NETSTACK[websocket_exec.cpp427]LwsCallbackWsiDestroy
IC015b0/NetMgrSubsystem:NETSTACK[websocket_exec.cpp515]ExecConnectwebsocketconnectfailed
IC015b0/NetMgrSubsystem:NETSTACK[websocket_exec.cpp433]LwsCallbackProtocolDestroy
IC015b0/NetMgrSubsystem:NETSTACK[websocket_exec.cpp530]ConnectCallbackconnectfailed

小結

OpenHarmony 目前已支持 WebSocket 調用,通過回調函數返回調用結果。

作者:王石

審核編輯:湯梓紅
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 服務器
    +關注

    關注

    13

    文章

    9797

    瀏覽量

    88041
  • 網絡通訊
    +關注

    關注

    0

    文章

    78

    瀏覽量

    11609
  • WebSocket
    +關注

    關注

    0

    文章

    30

    瀏覽量

    4118
  • 鴻蒙
    +關注

    關注

    60

    文章

    2623

    瀏覽量

    44076
  • OpenHarmony
    +關注

    關注

    29

    文章

    3856

    瀏覽量

    18653

原文標題:鴻蒙上WebSocket的使用方法

文章出處:【微信號:gh_834c4b3d87fe,微信公眾號:OpenHarmony技術社區】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    鴻蒙原生應用開發-網絡管理WebSocket連接

    一、場景介紹 使用WebSocket建立服務器與客戶端的雙向連接,需要先通過createWebSocket()方法創建WebSocket對象,然后通過connect()方法連接到服務器
    發表于 04-07 09:46

    【開發實錄】在鴻蒙開發板上使用websocket(移植自librws庫)

    librws: Tiny, cross platform websocket client C library相關代碼可在下面下載,也可進入librws: 將librws移植到鴻蒙Hi_3861
    發表于 11-24 11:19

    請問鴻蒙hap包是否支持插件化開發?

    如題,安卓上可以使用dexclassloader機制動態加載其他apk作為插件使用,鴻蒙上用類似的能力嗎?有什么解決方案呢?
    發表于 06-16 11:34

    示波器的使用方法

    數字萬用表使用方法和示波器的使用方法詳解。
    發表于 03-14 10:38 ?32次下載

    什么是WebSocket?進行通信解析 WebSocket 報文及實現

    一般情況下全為 0。當客戶端、服務端協商采用 WebSocket 擴展時,這三個標志位可以非0,且值的含義由擴展進行定義。如果出現非零的值,且并沒有采用 WebSocket 擴展,連接出錯。
    的頭像 發表于 05-15 16:59 ?1w次閱讀
    什么是<b class='flag-5'>WebSocket</b>?進行通信解析 <b class='flag-5'>WebSocket</b> 報文及實現

    鴻蒙系統上市后到底可不可以把現有手機安卓系統換成鴻蒙系統

    鴻蒙上市后,我可以把現有手機安卓系統換成鴻蒙嗎?華為為了擴大鴻蒙系統使用范圍,應該是對不算很老的機型可以進行系統替換,這是擴大市場最快且最方便的方法,華為應該是不會放棄這樣的操作
    的頭像 發表于 02-03 12:47 ?3.1w次閱讀

    WebSocket有什么優點

    WebSocket是一種在單個TCP連接上進行全雙工通信的協議。WebSocket通信協議于2011年被IETF定為標準RFC 6455,并由RFC7936補充規范。WebSocket API也被W3C定為標準。HTML5開始提
    的頭像 發表于 02-15 15:53 ?8551次閱讀
    <b class='flag-5'>WebSocket</b>有什么優點

    WebSocket工作原理及使用方法

    它有很多名字; WebSocketWebSocket協議和WebSocket API。從首選的消息傳遞應用程序到流行的在線多人游戲,WebSocket在當今最常用的Web應用程序中是
    的頭像 發表于 05-05 22:12 ?8267次閱讀
    <b class='flag-5'>WebSocket</b>工作原理及<b class='flag-5'>使用方法</b>

    示波器的使用方法(三):示波器的使用方法詳解

    示波器的使用方法并非很難,重點在于正確使用示波器的使用方法。往期文章中,小編對模擬示波器的使用方法和數字示波器的使用方法均有所介紹。為增進大家對示波器的
    的頭像 發表于 12-24 20:37 ?3838次閱讀

    鴻蒙上使用Python進行物聯網編程

    炫耀!然而,這卻是非常重要的一步:在鴻蒙上用使用 Python 進行物聯網編程是可行的!!! 既然可行,加上 Python 語言天生的優勢(易于掌握,開發效率高),那么真的值得持續打造,將鴻蒙上的 Python 進行到底。 所以,今天的主題就是利用 GPIO 搭配 I2C
    的頭像 發表于 09-28 09:55 ?4709次閱讀
    在<b class='flag-5'>鴻蒙上</b>使用Python進行物聯網編程

    鴻蒙上安裝按鈕實現下載、暫停、取消、顯示等操作

    今天給大家分享在鴻蒙上一個按鈕實現下載、暫停、取消、顯示下載進度操作。
    的頭像 發表于 01-04 14:32 ?2733次閱讀

    鴻蒙上實現“數字華容道”小游戲

    本篇文章教大家如何在鴻蒙上實現“數字華容道”小游戲。
    的頭像 發表于 12-26 09:52 ?1600次閱讀

    鴻蒙上開發“小蜜蜂”游戲

    小時候我們有個熟悉的游戲叫小蜜蜂。本文教大家在鴻蒙上學做這個小蜜蜂游戲。
    的頭像 發表于 04-03 11:27 ?2018次閱讀

    websocket協議的原理

    WebSocket協議是基于TCP的一種新的網絡協議。它實現了瀏覽器與服務器全雙工(full-duplex)通信——允許服務器主動發送信息給客戶端。 WebSocket通信協議于2011年被IETF
    的頭像 發表于 11-09 15:13 ?1736次閱讀
    <b class='flag-5'>websocket</b>協議的原理

    鴻蒙開發網絡管理:ohos.net.webSocket WebSocket連接

    使用WebSocket建立服務器與客戶端的雙向連接,需要先通過[createWebSocket]方法創建[WebSocket]對象,然后通過[connect]方法連接到服務器。當連接成
    的頭像 發表于 06-19 17:12 ?1853次閱讀
    <b class='flag-5'>鴻蒙</b>開發網絡管理:ohos.net.<b class='flag-5'>webSocket</b> <b class='flag-5'>WebSocket</b>連接
    主站蜘蛛池模板: 日本69sex护士hd | 日本黄页网址 | 国产精品国产主播在线观看 | 亚洲欧美网站 | 怡红院网址 | 女同性大尺度床戏视频 | 午夜影院啊啊啊 | 特级无码毛片免费视频尤物 | 久久影视精品 | 中文天堂最新版在线中文 | 国产午夜爽爽窝窝在线观看 | 男人天堂网在线观看 | 日韩高清特级特黄毛片 | 亚洲婷婷综合色高清在线 | 一区二区不卡免费视频 | 国产福利萌白酱喷水视频铁牛 | 男人天堂网2021| 亚洲精品电影天堂网 | 欧美性猛交xxxx乱大交高清 | 站长工具天天爽视频 | 色偷偷网址 | 狠狠欧美| 男人操女人免费网站 | 伊人2233| 欧美性free免费 | 性感美女福利视频 | 在线免费视频一区二区 | 色色免费| 日本夜夜操 | 在线天堂中文新版有限公司 | 亚洲综合色吧 | 影视精品网站入口 | 超人碰碰碰人人成碰人 | 美女喷白浆 | 天天看天天干天天操 | 羞涩妩媚玉腿呻吟嗯啊销魂迎合 | 中文字幕第一页在线 | 窝窝午夜视频 | 米奇777四色精品人人爽 | 九七婷婷狠狠成人免费视频 | 一区二区三区高清不卡 |