[c]mosquitto编码实现websockets协议
mosquitto虽然本身是支持websockets协议的,但却依懒libwebsockets库,而libwebsockets库是基于poll的,所以如果想把mosquitto改为epoll模式很容易,却不能兼容websockets了。
为了解决这个纠结的问题,这几天把websockets协议用C语言重新实现了一遍,然后将mosquitto中调用libwebsockets的部分用自己的代码取代,今天终于实现了websockets下的mqtt通讯功能。
首先一些websockets的结构放在websockets.h中:
typedef struct _WebSocketMark { BYTE fin:1; BYTE rsv1:1; BYTE rsv2:1; BYTE rsv3:1; BYTE opcode:4; BYTE mask:1; BYTE payloadlen:7; } WSMark; typedef struct _WebSocketHeader { WSMark mark; UINT64 reallength; unsigned char mask[4]; unsigned short headlength; } WSHeader;
然后一些功能函数的实现放在websockets.c中:
int shakeHands(const char* data, char* request); int parsePack(unsigned char* buf, size_t length, WSHeader* header); int packData(const unsigned char* message, size_t len, BYTE fin, BYTE opcode, BYTE mask, unsigned char** send, size_t* slen); int getPackPayloadData(const int cfd, const unsigned char* buf, size_t bufsize, unsigned char* container, const WSHeader* pHeader);
然后是mosquitto中将websockets端口的监听部分放到mqtt中去,原作是在此处调用libwebsockets库中的初始化函数而不暴露新建的socket。
然后是mosquitto中有一个主循环叫mosquitto_main_loop,在这个里面会处理接收到的消息,需要增加websockets的消息处理,原作是在此处调用libwebsockets库中的函数。
日历
最新微语
- 有的时候,会站在分叉路口,不知道向左还是右
2023-12-26 15:34
- 繁花乱开,鸟雀逐风。心自宁静,纷扰不闻。
2023-03-14 09:56
- 对于不可控的事,我们保持乐观,对于可控的事情,我们保持谨慎。
2023-02-09 11:03
- 小时候,
暑假意味着无忧无虑地玩很长一段时间,
节假意味着好吃好喝还有很多长期不见的小朋友来玩...
长大后,
这是女儿第一个暑假,
一个半月...
2022-07-11 08:54
- Watching the autumn leaves falling as you grow older together
2018-10-25 09:45
分类
最新评论
- Goonog
i get it now :) - 萧
@Fluzak:The web host... - Fluzak
Nice blog here! Also... - Albertarive
In my opinion you co... - ChesterHep
What does it plan? - ChesterHep
No, opposite. - mojoheadz
Everything is OK!... - Josephmaigh
I just want to say t... - ChesterHep
What good topic - AnthonyBub
Certainly, never it ...
发表评论: