Q群:
电话:
邮箱:
地址:
OneOS websocket组件提供websocket client连接、监听、发送等功能,用户可以简单调用websocket组件API,快速实现websocket client连接。
其中websocket client提供的api可以参考“Component\components\net\protocols\websocket\api\client\include\ws_client.h”,重要的数据结构可以参考“Component\components\net\protocols\websocket\core\include\ws_def.h”。
接口 | 说明 |
---|---|
ws_client_create | 创建WebSocket client对象 |
ws_client_destroy | 销毁WebSocket client实例对象 |
ws_client_event_register | 注册事件响应函数 |
ws_client_get_state | 查询当前连接状态 |
ws_client_get_by_url | 根据url查询WebSocket client文件描述符 |
ws_client_start | 启动WebSocket client服务,包括TCP建链及HTTP握手过程 |
ws_client_send | 发送报文 |
ws_client_stop | 停止WebSocket client服务,并通知服务器 |
ws_client_get_default_header | 获取默认HTTP握手头字符串 |
该接口用于创建websocket实例对象
int ws_client_create(const char *url)
参数 | 说明 |
---|---|
url | 服务器地址url字符串,可以使用域名方式及IP,如果url携带端口号,则使用url端口号,否则使用ws/wws默认端口号。 例:url="ws://echo.websocket.org/" 或 url="ws://127.0.0.1:1234" |
返回 | 说明 |
小于0 | 操作失败 |
其他 | WebSocket clinet文件描述符 |
该接口用于销毁websocket对象。
void ws_client_destroy(int fd)
参数 | 说明 |
---|---|
fd | WebSocket clinet文件描述符 |
返回 | 说明 |
无 |
该接口用于websocket事件注册
int ws_client_event_register(int fd, struct ws_event *event)
参数 | 说明 |
---|---|
fd | WebSocket clinet文件描述符 |
event | 事件响应函数结构体指针 |
返回 | 说明 |
OS_EOK | 操作成功 |
其他 | 操作失败 |
该接口用于查询websocket当前连接状态
ws_state_t ws_client_get_state(int fd)
参数 | 说明 |
---|---|
fd | WebSocket clinet文件描述符 |
返回 | 说明 |
ws_state_t | 当前连接状态,具体信息参考enum ws_state |
该接口用于查询子协议类型,仅当连接成功后有效。
int ws_client_get_by_url(const char *url)
参数 | 说明 |
---|---|
url | 服务器地址url字符串 |
返回 | 说明 |
小于0 | 操作失败 |
其他 | WebSocket clinet文件描述符 |
该接口用于启动websocket client服务,启动成功后,可以正常响应已注册的事件,及发送报文等操作。
注:启动时将初始化websocket client线程,其栈深度在menuconfig中定义。
int ws_client_start(int fd, os_uint8_t time_out, char *header)
参数 | 说明 |
---|---|
fd | websocket clinet文件描述符 |
time_out | websocket clinet启动超时时间,包括TCP建链及HTTP握手。0为永久等待连接成功 |
header | HTTP请求头字符串地址,header=NULL时,不启动HTTP握手 |
返回 | 说明 |
OS_EOK | 操作成功 |
其他 | 操作失败 |
该接口用于数据报文发送,支持文本、二进制、PING、PONG格式数据发送。
int ws_client_send(int fd, os_uint8_t *data, os_uint16_t len, ws_data_type_t type)
参数 | 说明 |
---|---|
fd | WebSocket clinet文件描述符 |
data | 待发送数据地址 |
len | 待发送数据长度 |
type | 待发送数据类型 |
返回 | 说明 |
OS_EOK | 发送成功 |
其他 | 发送失败 |
该接口用于停止websocket client服务,并将消息通知到服务器。待连接关闭后将停止websocket服务,停止服务后无法正常响应事件、发送报文等操作。
void ws_client_stop(int fd, os_uint16_t code)
参数 | 说明 |
---|---|
fd | WebSocket clinet文件描述符 |
code | 关闭原因编码,可以使用enum ws_close_type,也可以用户自定义 |
返回 | 说明 |
无 |
该接口用于生成默认HTTP请求头字符串。
char *ws_client_get_default_header(int fd)
参数 | 说明 |
---|---|
fd | WebSocket clinet文件描述符 |
返回 | 说明 |
NULL | 生成失败 |
其他 | 握手头字符串地址 |
static void task_entry(void *parameter)
{
int fd = ws_client_create(url); //创建websocket client实例
if (fd < 0)
{
LOG_EXT_E("client create fail!");
return;
}
printf("ws satate:%d\n", ws_client_get_state(fd));
int ret = ws_client_event_register(fd, &event); //注册用户事件回调函数
if (ret != OS_EOK)
{
LOG_EXT_E("ws event registe fail!");
return;
}
ret = ws_client_start(fd, 3, ws_client_get_default_header(fd)); //启动websocket client连接
if (ret != OS_EOK)
{
LOG_EXT_E("ws client start fail!");
return;
}
while (OS_TRUE)
{
os_uint8_t tx_buf[WEBSOCKET_CLIENT_MAX_BUFF_DEP];
ws_client_send(fd, tx_buf, WEBSOCKET_CLIENT_MAX_BUFF_DEP, WS_DATA_TXT_DATA); //向服务器端发送数据
os_task_msleep(5000);
}
ws_client_stop(fd, 0);
ws_client_destroy(fd);
return;
}