websocket
简介
使用WebSocket进行网络通讯
- WebSocket是与http同样处于网络协议中的应用层, 底层通过tcp进行通讯。
- WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。
- 在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就可以创建持久性的连接,并进行双向数据传输。
 
优点
- 较少的控制开销。
- 在连接创建后,服务器和客户端之间交换数据时,用于协议控制 的数据包头部相对较小。
 
- 更强的实时性。
- 由于协议是全双工的,所以服务器可以随时主动给客户端下发数据。
- 相对于HTTP请求需要等待客户端发起请求服务端才能响应,延迟明显更少
 
- 保持连接状态。
- 与HTTP不同的是,WebSocket需要先创建连接,这就使得其成为一种有状态的协议,之后通信时可以省略部分状态信息。
- 而HTTP请求可能需要在每个请求都携带状态信息(如身份认证等)。
 
- 更好的二进制支持。
- WebSocket定义了二进制帧,相对HTTP,可以更轻松地处理二进制内容。
 
- 可以支持扩展。
- WebSocket定义了扩展,用户可以扩展协议、实现部分自定义的子协议。如部分浏览器支持压缩等。
 
- 更好的压缩效果。
- 相对于HTTP压缩,WebSocket在适当的扩展支持下,可以沿用之前内容的上下文,在传递类似的数据时,可以显著地提高压缩率。
 
握手协议
- WebSocket 是独立的、创建在TCP上的协议。
- WebSocket 通过 HTTP/1.1 协议的101状态码进行握手。
- 为了创建WebSocket连接,需要通过浏览器发出请求,之后服务器进行回应,这个过程通常称为“握手”(Handshaking)
仓库地址
:::
组件接口
FWebSocketBase.gs
ws链接对象的基础功能
| 函数原型 | 函数作用 | 
|---|---|
| int get_W() | 返回关联的websocket资源 | 
| void set_W(int w) | 设置关联的websocket资源 | 
| void bind_value(mixed value) | 绑定一个关联值 | 
| mixed get_bind_value() | 获取和本对象绑定的值 | 
| void enable_debug(bool flag) | 打开/关闭调试 | 
| void set_callback(string type, function callback) | 设置连接对象的触发事件的回调处理 | 
| void run() | 在当前线程中运行该连接对象 | 
| coroutine run_in_thread() | 在独立的线程中运行该连接对象 | 
FWebSocketClientBase.gs
websocket客户端连接基础组件
| 函数原型 | 函数作用 | 
|---|---|
| void disconnect() | 断开连接 | 
| string remote_address() | 获取该连接对象的远程地址信息 | 
| bool send(mixed payload) | 发送数据 | 
| bool send_ping(string payload = "ping") | ping/pong机制中用于发送一个PING包 | 
| bool send_pong(string payload = "pong") | ping/pong机制中用于发送一个PONG包 | 
websocket.gs
| 函数原型 | 函数作用 | 
|---|---|
| object create_client() | 创建websocket的客户端连接 | 
| object create_server() | 创建websocket的服务端连接 | 
WebSocketClient.gs
客户侧连接对象
| 函数原型 | 函数作用 | 
|---|---|
| bool is_ws_client() | 我是websocket client对象 | 
| void connect(string uri) | 连接指定的主机 | 
WebSocketServer.gs
提供websocket连接接入的服务对象
| 函数原型 | 函数作用 | 
|---|---|
| bool is_ws_server() | 我是websocket server对象 | 
| bool listen(int port, bool reuse_addr) | 开启websocket的监听 | 
| bool clients_empty() | 服务侧连接数量是不是为0 | 
WebSocketServerClient.gs
服务侧连接对象
| 函数原型 | 函数作用 | 
|---|---|
| bool is_ws_server_client() | 我是websocket server client对象 | 
枚举
WsRole
Ws角色
| 枚举成员 | 值 | 描述 | 
|---|---|---|
| Client | ||
| Server | ||
| ServerClient | 
WsEvent
Ws事件
| 枚举成员 | 值 | 描述 | 
|---|---|---|
| Open | ||
| Fail | ||
| Close | ||
| Ping | ||
| Pong | ||
| Message | 
WsState
Ws状态
| 枚举成员 | 值 | 描述 | 
|---|---|---|
| connecting | 0 | |
| open | 1 | |
| closing | 2 | |
| closed | 3 |