代码拉取完成,页面将自动刷新
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在握手时的必须库,直接添加到工程即可。
直接加入工程并编译即可。
按照头文件调用函数
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。