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 |