WebSocket(全双工通信协议)
# 简介
WebSocket是一种在单个TCP连接上进行全双工通信的协议。WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。HTML5 定义的 WebSocket 协议,能更好的节省服务器资源和带宽,并且能够更实时地进行通讯。
# API说明
websocket的API在LuatOS-Air lib有做封装,建议直接用lib的API接口。
|API接口| 描述|
| --- | --- |
| websocket.new()|创建 websocket 对象|
| ws:on()|注册函数|
| ws:start()|启动websocket|
>详细的API介绍见 [websocket API章节](https://doc.openluat.com/wiki/21?wiki_page_id=2622"websocketAPI说明")
# 实现流程
- 创建 websocket 对象
- 注册对应相关处理函数
- 启动任务进程
# 示例
相关实例程序在脚本库的demo\websocket文件夹下
- 创建 websocket 对象
```lua
local ws = websocket.new("ws://82.157.123.54:9010/ajaxchattest")
```
- 注册对应相关处理函数
这里注册了"open","message","send",close","error"事件的处理函数,回调方法,message|error|pong 形参是该方法需要的数据。
```lua
ws:on("open", function()
ws:send("hello websocket server!")
end)
ws:on("message", function(msg)
log.info("收到 websocket server 的消息:", msg)
end)
ws:on("sent", function()
log.info("sent to websocket:", "发送消息已完成!")
end)
ws:on("error", function(msg)
log.error("websocket error:", msg)
end)
ws:on("close", function(code)
log.info("websocket closed,关闭码:", code)
end)
```
# 常见问题
- websocket服务器的连接地址,格式为ws://xxx (或者wss://xxx)开头
- websocket 需要在任务中启动,带自动重连,支持心跳协议
- websocket心跳包,建议180秒