成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

跟著小白一起學(xué)鴻蒙—WebSocket的使用和流程分析

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

??想了解更多關(guān)于開源的內(nèi)容,請訪問:??

??51CTO 開源基礎(chǔ)軟件社區(qū)??

??https://ost.51cto.com??

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

WebSocket有什么不同

很多人會問,有了HTTP協(xié)議,尤其是RESTFul接口,為什么還需要使用WebSocket?它能帶來什么好處呢?那是因?yàn)镠TTP協(xié)議有一個缺陷,通訊只能由客戶端發(fā)起。簡單舉例,我們的天氣應(yīng)用程序需要查詢天氣就需要客戶端向服務(wù)器請求數(shù)據(jù),服務(wù)器查詢后返回結(jié)果。但是如果天氣有變化,客戶端是無法收到服務(wù)端推送過來的消息,所以只能定時調(diào)用或者用戶手動刷新。
這種單向請求導(dǎo)致需要雙向通訊的應(yīng)用只能在客戶端采用輪詢的手段來實(shí)現(xiàn),引申出來的問題就是效率低,服務(wù)端負(fù)載大。所以就誕生了WebSocket。

WebSocket簡介

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

  • HTTP流程

  • WebSocket流程

特點(diǎn):

  1. 在TCP協(xié)議上層,服務(wù)器端的實(shí)現(xiàn)比較容易。
  2. 與HTTP協(xié)議有著良好的兼容性。默認(rèn)端口也是80和443,并且握手階段采用 HTTP 協(xié)議,因此握手時不容易屏蔽,能通過各種 HTTP 代理服務(wù)器。
  3. 數(shù)據(jù)格式比較輕量,性能開銷小,通信高效。
  4. 可發(fā)送文本,也可發(fā)送二進(jìn)制數(shù)據(jù)。
  5. 沒有同源限制,客戶端可以與任意服務(wù)器通信。
  6. 協(xié)議標(biāo)識符是ws(如果加密,則為wss),服務(wù)器網(wǎng)址就是URL。

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

WebSocket在OpenHarmony上的使用

  1. 導(dǎo)入d.ts文件
//導(dǎo)入websocket接口
import webSocket from '@ohos.net.webSocket'
//websocket的基本接口函數(shù)
connect(url: string, callback: AsyncCallback<boolean>): void;
send(data: string | ArrayBuffer, callback: AsyncCallback<boolean>): void;
close(callback: AsyncCallback<boolean>): void;
  1. 基本的websocket流程
let promise = socket.connect(url)
promise.then((value) => {
Logger.info(TAG, `connect success`)
}).catch((err) => {
Logger.info(TAG, `connect fail, error:${JSON.stringify(err)}`)
})
socket.on('open', (err, value) => {
prompt.showToast({ message: '連接成功', duration: 1500 })
})
socket.on('message', (err, value) => {
Logger.info(TAG, `on message, value = ${value}`)
})

Framework層的實(shí)現(xiàn)

  1. Napi接口實(shí)現(xiàn)。
//foundation/communication/netstack/frameworks/js/napi/websocket/websocket_module/src/websocket_module.cpp
std::initializer_list<napi_property_descriptor> properties = {
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);
  1. 異步執(zhí)行動作。
//foundation/communication/netstack/frameworks/js/napi/websocket/async_work/src/websocket_async_work.cpp
//初始化libwebsocket需要的callback
static const lws_protocols LWS_PROTOCOLS[] = {
{"lws-minimal-client", WebSocketExec::LwsCallback, 0, 0},
{nullptr, nullptr, 0, 0}, // this line is needed
};

//填裝websocket上下文信息
static inline void FillContextInfo(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;
}

void WebSocketAsyncWork::ExecConnect(napi_env env, void *data)
{
BaseAsyncWork::ExecAsyncWork<ConnectContext, WebSocketExec::ExecConnect>(env, data);
}

void WebSocketAsyncWork::ExecSend(napi_env env, void *data)
{
BaseAsyncWork::ExecAsyncWork<SendContext, WebSocketExec::ExecSend>(env, data);
}

void WebSocketAsyncWork::ExecClose(napi_env env, void *data)
{
BaseAsyncWork::ExecAsyncWork<CloseContext, WebSocketExec::ExecClose>(env, data);
}
  1. 執(zhí)行結(jié)果日志打印。
//正確連接
I C015b0/NetMgrSubsystem: NETSTACK [connect_context.cpp 43] ConnectContext NapiUtils::GetValueType(GetEnv(), params[1]) == napi_function
I C015b0/NetMgrSubsystem: NETSTACK [module_template.h 61] js params parse OK ? 1
I C015b0/NetMgrSubsystem: NETSTACK [websocket_exec.cpp 471] begin connect, parse url
E C015b0/NetsysNativeService: [HookSocket-(netsys_sock_client.cpp:45)]musl create socket failed
I C015b0/NetMgrSubsystem: NETSTACK [websocket_exec.cpp 228] start service
I C015b0/NetMgrSubsystem: NETSTACK [websocket_exec.cpp 533] ConnectCallback connect success

//錯誤連接
I C015b0/NetMgrSubsystem: NETSTACK [connect_context.cpp 43] ConnectContext NapiUtils::GetValueType(GetEnv(), params[1]) == napi_function
I C015b0/NetMgrSubsystem: NETSTACK [module_template.h 61] js params parse OK ? 1
I C015b0/NetMgrSubsystem: NETSTACK [websocket_exec.cpp 471] begin connect, parse url
E C015b0/NetsysNativeService: [HookSocket-(netsys_sock_client.cpp:45)]musl create socket failed
I C015b0/NetMgrSubsystem: NETSTACK [websocket_exec.cpp 358] LwsCallbackClientConnectionError DNS NXDOMAIN
I C015b0/NetMgrSubsystem: NETSTACK [websocket_exec.cpp 427] LwsCallbackWsiDestroy
I C015b0/NetMgrSubsystem: NETSTACK [websocket_exec.cpp 515] ExecConnect websocket connect failed
I C015b0/NetMgrSubsystem: NETSTACK [websocket_exec.cpp 433] LwsCallbackProtocolDestroy
I C015b0/NetMgrSubsystem: NETSTACK [websocket_exec.cpp 530] ConnectCallback connect failed

小結(jié)

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

??想了解更多關(guān)于開源的內(nèi)容,請訪問:??

??51CTO 開源基礎(chǔ)軟件社區(qū)??

??https://ost.51cto.com??

責(zé)任編輯:jianghua 來源: 51CTO 開源基礎(chǔ)軟件社區(qū)
相關(guān)推薦

2023-02-27 16:30:32

鴻蒙開源協(xié)議分析

2022-12-02 14:20:09

Tetris鴻蒙

2022-11-29 16:35:02

Tetris鴻蒙

2023-03-15 16:19:03

BinderIPC工具

2023-03-30 09:32:27

2022-11-14 17:01:34

游戲開發(fā)畫布功能

2023-03-30 09:19:54

SELinux安全子系統(tǒng)

2022-08-19 19:02:20

開源鴻蒙操作系統(tǒng)

2022-10-10 14:47:04

藍(lán)牙應(yīng)用鴻蒙

2023-04-04 09:24:11

鴻蒙HiDumper

2023-01-03 15:09:10

鴻蒙常用工具

2023-04-06 09:18:52

鴻蒙AVPlayerAVRecorder

2022-10-09 15:05:50

NAPI框架鴻蒙

2022-10-20 16:40:16

JS應(yīng)用控制LED鴻蒙

2022-11-24 14:34:41

Hap程序鴻蒙

2022-12-06 15:39:16

鴻蒙主干代碼

2022-10-17 14:29:24

鴻蒙應(yīng)用開發(fā)

2022-11-22 15:15:46

Wi-Fi鴻蒙

2022-11-03 15:47:04

HTTP通信協(xié)議

2022-11-08 15:43:45

開源鴻蒙藍(lán)牙協(xié)議棧
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 视频一区中文字幕 | 国产高清精品在线 | 天天操天天天干 | 成人一级黄色毛片 | 国产高清在线精品 | 国产亚洲一区二区在线观看 | 欧美激情a∨在线视频播放 成人免费共享视频 | 国产视频综合 | 在线免费观看成年人视频 | 在线国产精品一区 | 日韩成人在线播放 | 99久久精品视频免费 | 成人久久18免费网站图片 | 超碰天天 | 性福视频在线观看 | 亚洲成网 | 国产日韩欧美一区二区在线播放 | 欧美视频第二页 | 日韩中文字幕免费在线观看 | 国产91在线 | 亚洲 | 免费a在线 | 精品久久国产 | 国产日韩精品一区 | 成人av高清在线观看 | 日韩中文一区二区三区 | 欧美极品视频在线观看 | 久久久性色精品国产免费观看 | 国产精品一区二区久久久久 | 午夜小视频在线播放 | 国产精品一区二区不卡 | 九色在线视频 | 精品一区二区视频 | 91精品久久久久久久久久 | 九九免费在线视频 | 欧美精品在线观看 | 爱爱视频日本 | 性国产丰满麻豆videosex | 久久精品国产免费 | 成人av网站在线观看 | jlzzjlzz国产精品久久 | 国产一区二区视频在线 |