色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
电子发烧友
开通电子发烧友VIP会员 尊享10大特权
海量资料免费下载
精品直播免费看
优质内容免费畅学
课程9折专享价
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

鴻蒙上WebSocket的使用方法

OpenHarmony技術(shù)社區(qū) ? 來源:OST開源開發(fā)者 ? 2023-03-08 14:17 ? 次閱讀

WebSocket 是一種網(wǎng)絡(luò)通訊協(xié)議,很多網(wǎng)絡(luò)開發(fā)工作者都需要它。本文介紹在 OpenHarmony 上 WebSocket 協(xié)議的使用方法。

WebSocket 有什么不同

很多人會(huì)問,有了 HTTP 協(xié)議,尤其是 RESTFul 接口,為什么還需要使用 WebSocket?它能帶來什么好處呢?那是因?yàn)?HTTP 協(xié)議有一個(gè)缺陷,通訊只能由客戶端發(fā)起。

簡(jiǎn)單舉例,我們的天氣應(yīng)用程序需要查詢天氣就需要客戶端向服務(wù)器請(qǐng)求數(shù)據(jù),服務(wù)器查詢后返回結(jié)果。

但是如果天氣有變化,客戶端是無法收到服務(wù)端推送過來的消息,所以只能定時(shí)調(diào)用或者用戶手動(dòng)刷新。

這種單向請(qǐng)求導(dǎo)致需要雙向通訊的應(yīng)用只能在客戶端采用輪詢的手段來實(shí)現(xiàn),引申出來的問題就是效率低,服務(wù)端負(fù)載大。所以就誕生了 WebSocket。

WebSocket 簡(jiǎn)介

WebSocket 協(xié)議誕生于 2008 年,2011 年成為國(guó)際標(biāo)準(zhǔn),所有瀏覽器都支持。它最大的特點(diǎn)就是雙向平等對(duì)話,屬于服務(wù)器推送技術(shù)的一種。

HTTP 流程:

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

WebSocket 流程:

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

特點(diǎn):

在 TCP 協(xié)議上層,服務(wù)器端的實(shí)現(xiàn)比較容易。

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

數(shù)據(jù)格式比較輕量,性能開銷小,通信高效。

可發(fā)送文本,也可發(fā)送二進(jìn)制數(shù)據(jù)。

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

協(xié)議標(biāo)識(shí)符是 ws(如果加密,則為 wss),服務(wù)器網(wǎng)址就是 URL。

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

WebSocket在OpenHarmony上的實(shí)現(xiàn)

如下圖:

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

WebSocket在OpenHarmony上的使用

導(dǎo)入 d.ts 文件:

//導(dǎo)入websocket接口
importwebSocketfrom'@ohos.net.webSocket'
//websocket的基本接口函數(shù)
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層的實(shí)現(xiàn)

Napi 接口實(shí)現(xiàn):

//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);
異步執(zhí)行動(dòng)作:
//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);
}
執(zhí)行結(jié)果日志打印:
//正確連接
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

//錯(cuò)誤連接
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

小結(jié)

OpenHarmony 目前已支持 WebSocket 調(diào)用,通過回調(diào)函數(shù)返回調(diào)用結(jié)果。

作者:王石

審核編輯:湯梓紅
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 服務(wù)器
    +關(guān)注

    關(guān)注

    12

    文章

    9681

    瀏覽量

    87243
  • 網(wǎng)絡(luò)通訊
    +關(guān)注

    關(guān)注

    0

    文章

    77

    瀏覽量

    11497
  • WebSocket
    +關(guān)注

    關(guān)注

    0

    文章

    30

    瀏覽量

    4014
  • 鴻蒙
    +關(guān)注

    關(guān)注

    59

    文章

    2503

    瀏覽量

    43750
  • OpenHarmony
    +關(guān)注

    關(guān)注

    26

    文章

    3820

    瀏覽量

    18102

原文標(biāo)題:鴻蒙上WebSocket的使用方法

文章出處:【微信號(hào):gh_834c4b3d87fe,微信公眾號(hào):OpenHarmony技術(shù)社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 0人收藏

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    鴻蒙原生應(yīng)用開發(fā)-網(wǎng)絡(luò)管理WebSocket連接

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

    【開發(fā)實(shí)錄】在鴻蒙開發(fā)板上使用websocket(移植自librws庫(kù))

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

    請(qǐng)問鴻蒙hap包是否支持插件化開發(fā)?

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

    示波器的使用方法

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

    什么是WebSocket?進(jìn)行通信解析 WebSocket 報(bào)文及實(shí)現(xiàn)

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

    鴻蒙系統(tǒng)上市后到底可不可以把現(xiàn)有手機(jī)安卓系統(tǒng)換成鴻蒙系統(tǒng)

    鴻蒙上市后,我可以把現(xiàn)有手機(jī)安卓系統(tǒng)換成鴻蒙嗎?華為為了擴(kuò)大鴻蒙系統(tǒng)使用范圍,應(yīng)該是對(duì)不算很老的機(jī)型可以進(jìn)行系統(tǒng)替換,這是擴(kuò)大市場(chǎng)最快且最方便的方法,華為應(yīng)該是不會(huì)放棄這樣的操作
    的頭像 發(fā)表于 02-03 12:47 ?3.1w次閱讀

    WebSocket有什么優(yōu)點(diǎn)

    WebSocket是一種在單個(gè)TCP連接上進(jìn)行全雙工通信的協(xié)議。WebSocket通信協(xié)議于2011年被IETF定為標(biāo)準(zhǔn)RFC 6455,并由RFC7936補(bǔ)充規(guī)范。WebSocket API也被W3C定為標(biāo)準(zhǔn)。HTML5開始提
    的頭像 發(fā)表于 02-15 15:53 ?8497次閱讀
    <b class='flag-5'>WebSocket</b>有什么優(yōu)點(diǎn)

    WebSocket工作原理及使用方法

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

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

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

    鴻蒙上使用Python進(jìn)行物聯(lián)網(wǎng)編程

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

    鴻蒙上安裝按鈕實(shí)現(xiàn)下載、暫停、取消、顯示等操作

    今天給大家分享在鴻蒙上一個(gè)按鈕實(shí)現(xiàn)下載、暫停、取消、顯示下載進(jìn)度操作。
    的頭像 發(fā)表于 01-04 14:32 ?2605次閱讀

    鴻蒙上實(shí)現(xiàn)“數(shù)字華容道”小游戲

    本篇文章教大家如何在鴻蒙上實(shí)現(xiàn)“數(shù)字華容道”小游戲。
    的頭像 發(fā)表于 12-26 09:52 ?1490次閱讀

    鴻蒙上開發(fā)“小蜜蜂”游戲

    小時(shí)候我們有個(gè)熟悉的游戲叫小蜜蜂。本文教大家在鴻蒙上學(xué)做這個(gè)小蜜蜂游戲。
    的頭像 發(fā)表于 04-03 11:27 ?1922次閱讀

    websocket協(xié)議的原理

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

    鴻蒙開發(fā)網(wǎng)絡(luò)管理:ohos.net.webSocket WebSocket連接

    使用WebSocket建立服務(wù)器與客戶端的雙向連接,需要先通過[createWebSocket]方法創(chuàng)建[WebSocket]對(duì)象,然后通過[connect]方法連接到服務(wù)器。當(dāng)連接成
    的頭像 發(fā)表于 06-19 17:12 ?1025次閱讀
    <b class='flag-5'>鴻蒙</b>開發(fā)網(wǎng)絡(luò)管理:ohos.net.<b class='flag-5'>webSocket</b> <b class='flag-5'>WebSocket</b>連接
    主站蜘蛛池模板: 男人的天堂久久精品激情a 男人的天堂黄色片 | 91精品国产色综合久久不 | 国产毛片A级久久久不卡精品 | 国产精品欧美久久久久天天影视 | 哪灬你的鸣巴好大 | 91日本在线观看亚洲精品 | 亚洲国产成人精品无码区APP | 99国产热视频在线观看 | 九九热视频免费观看 | 18亚洲男同gay1069 | 日本女人bb| 中文字幕天堂久久精品 | 麻豆精品人妻一区二区三区蜜桃 | 日本午夜精品理论片A级APP发布 | 在线少女漫画 | 91综合精品网站久久 | 精品AV无码一二三区视频 | 国产在线高清亚洲精品一区 | 中文无码乱人伦中文视频播放 | 午夜伦yy44880影院 | 中国女人内谢69xxxxxx直播 | 久久视频这里只精品99热在线观看 | 我的好妈妈BD免费观看 | 色哟哟tv | 新妺妺窝人体色WWW 新金梅瓶玉蒲团性奴3 | 中文字幕一区二区三区在线播放 | 色网址在线观看 | 色琪琪久久热在线 | 亚洲免费黄色片 | 美女被撕开胸罩狂揉大乳 | 善良的女房东味道2在线观看 | 欧洲精品不卡1卡2卡三卡四卡 | 亚洲日韩有码无线免费 | 欧美最猛性xxxxx亚洲精品 | 男女生爽爽爽视频免费观看 | 白人大战34厘米黑人BD | 国内精品人妻无码久久久影院蜜桃 | 黑丝美女被人操 | 学生无码AV一区二区三区 | 羞羞答答的免费视频在线观看 | 青娱乐国产精品视频 |

    電子發(fā)燒友

    中國(guó)電子工程師最喜歡的網(wǎng)站

    • 2931785位工程師會(huì)員交流學(xué)習(xí)
    • 獲取您個(gè)性化的科技前沿技術(shù)信息
    • 參加活動(dòng)獲取豐厚的禮品