1 Star 2 Fork 0

public_rtos / 基于libevent的websocket

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
0BSD

基于libevent的websocket

介绍

libevent不支持websocket,强行改代码的话,对于以后升级libevent是个麻烦。本软件在libevent自带的http服务基础上,实现websocket。也可以用https实现wss

软件架构

在windows的mingw下面编译通过,使用良好,编译器是64位的GCC,在linux的32位嵌入式系统上编译通过,运行良好,编译器是gcc 本库完全在libevent的http协议基础上实现,对websocket文档里面的定义和标准90%的全都支持。 服务器端工作原理: 接收全客户端的http请求之后,在回调里面判断http头,对: 1. Connection的Upgrade进行判断, 2.webwocket升级请求进行判断, 3.对websocket版本进行判断, 全部通过则进行回调用户的conn函数,该函数会产生一个libws_t的结构体,应用层的初始化可以在这个回调进行初始化。如果返回空,则会断开客户端连接,认为服务器拒绝接入 新的libws_t则可以调用libws_send发送数据,收到数据会产生接收回调,在创建libws_t结构体时的接收回调里面进行处理 客户端工作原理: libws_connect链接服务器并指定接收、发送、接入、关闭4个回调函数,在相应的地方进行调用。 该函数调用了标准的libevent的http客户端进行通讯。

libevent默认的http服务器和客户端都是有默认超时设定,websocket在成功接入后,则自动屏蔽超时和其他回调,将产生的http connection数据处理和回调全部屏蔽,将connection设置为keep-alive状态,使用该connection的bufferevent进行通讯。
libws的客户端发送数据采用掩码发送,服务器发送数据不掩码,客户端和服务器的接收都可以识别是否掩码。
如果编译不通过,将日志打印改为用户项目中自己的打印,将get_fms函数定义为获取毫秒的函数即可。
注意get_fms函数,一定要采用相对时间,不能采用系统时间,因为系统时间一旦调整,会影响libws的超时判断。
本人在使用时采用了CLOCK_MONOTONIC进行获取相对时间,该时间一般是从系统启动开始计数,无论何种情况都不会清零和修改,只会按时间增量增加,用于软件的超时判断最合适不过。

sha1和base64是websocket在握手时的必须库,直接添加到工程即可。

安装教程

直接加入工程并编译即可。

使用说明

按照头文件调用函数

参与贡献

  1. Fork 本仓库
  2. 新建 Feat_xxx 分支
  3. 提交代码
  4. 新建 Pull Request

特技

  1. 使用 Readme_XXX.md 来支持不同的语言,例如 Readme_en.md, Readme_zh.md
  2. Gitee 官方博客 blog.gitee.com
  3. 你可以 https://gitee.com/public-rtos/src 这个地址来了解 Gitee 上的优秀开源项目
  4. GVP 全称是 Gitee 最有价值开源项目,是综合评定出的优秀开源项目
  5. Gitee 官方提供的使用手册 https://gitee.com/help
  6. Gitee 封面人物是一档用来展示 Gitee 会员风采的栏目 https://gitee.com/gitee-stars/
Copyright (c) 2022 public_rtos Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

简介

libevent不支持websocket,强行改代码的话,对于以后升级libevent是个麻烦。本软件在libevent自带的http服务基础上,实现websocket。也可以用https实现wss 展开 收起
C
0BSD
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
C
1
https://gitee.com/public-rtos/src.git
git@gitee.com:public-rtos/src.git
public-rtos
src
基于libevent的websocket
master

搜索帮助