简介
目前大部分游戏、移动互联网、H5客户端主要由JavaScript、Lua、C#、C++等语言进行逻辑开发, 其主要通讯方案便是基于HTTP协议的接口请求与Websocket的推送方案.
起因
skynet
内部实现了一套同步非阻塞socket
库, 并且提供了TCP通讯方案进行数据流分割. 所谓的TCP数据流分割
. 就是根据一定方式读取数据的一种流程.
最为常见的数据分割方案应该是: 2字节头部 + 数据载荷. 另一种通用方案是将头部扩展为4字节, 这样在头部信息中可以包含协议版本或者消息类型还可以进行平滑的进行协议升级扩展.
这些方案一般用于定制C/S网络协议. 绝大多数场景中并没有必须使用到这个场景, 且维护一套这样的协议也是需要占用开发周期的.本人也使用过国内的开发者基于skynet编写的websockket开发库. 就使用上来说效果不是很理想, 且期间遇到的一系列问题也需要自己实际定制化后才能解决.
刚好近期正在为自己开发的Lua Web框架编写Websocket使用教程, 那么干脆趁这个机会将它实现的Websocket
协议库也移植到skynet
上去.
编写完成后, 我将它随意的命名为: skynet-lua-websocket
.
开始移植工作
1. 握手流程
skynet
要使用Websocket协议进行通讯需要实现HTTP/1.1版本中101响应方法. skyent.httpd
库可以完成HTTP协议的解析工作, 但我并没有使用到它.
究其原因是因为websocket实