net_ex
简介
增强的网络功能库,目前支持websocket、gs socket两种
组件接口
FClientConnectionBase.gs
客户端连接基础组件
函数原型 | 函数作用 |
---|---|
map get_properties() | 获取连接对象的属性列表 |
mixed get_property(string property_path) | 获取连接对象的属性值 |
bool connect(string host, int port, int timeout = 5) | 连接服务器 |
void keep_alive(float interval) | 开启连接保持机制(定期自动发送ping) |
FConnectionBase.gs
连接的基础组件
函数原型 | 函数作用 |
---|---|
object get_raw_connection() | 获取原始连接对象 |
void bind_value(mixed value) | 关联一个值 |
mixed get_bind_value() | 获取关联的值 |
object bind_dispatcher(mixed co) | 设置本连接的消息处理对象(一般是NetworkCo实例) |
object get_dispatcher() | 获取消息处理对象 |
bool is_connected() | 判断连接是否已建 立 |
function get_box_func() | 获取消息的装箱函数 |
void disconnect() | 断开连接 |
void bind_handler_container_ob(object handler_container_ob) | 绑定消息处理器的管理对象 |
object unbind_handler_container_ob() | 解绑消息处理器的管理对象 |
void send_ping() | 虚函数 - 发送ping |
void send_pong() | 虚函数 - 发送pong |
bool check_passive_disconnect() | 判断是不是对端断开的连接 |
void on_connect(object client, function on_connect_callback, function on_disconnect_callback, object handler_container_ob) | 事件处理: 连接建立 |
void on_disconnect(bool passive_disconnect) | 事件处理: 连接断开 |
void on_message(mixed raw_payload) | 事件处理: 处理网络消息 |
void enable_debug(bool enable) | 设置是否打印调试信息 |
void debug_printf(string fmt, ...) | 打印调试信息 |
FServerBase.gs
网络服务器基础组件
NetCoD.gs
网络功能中提供网络消息处理对象NetworkCo实例的模块
函数原型 | 函数作用 |
---|---|
object new_co(function handle_func) | 获得一个消息处理对象NetworkCo实例 |
void delete_co(object ob) | 回收一个消息处理对象NetworkCo实例 |
object get_pool() | 获得当前使用的网络消息处理对象池(NetworkCoPool实例) |
void set_cache_size(int cache_size) | 设置网络消息处理对象池(NetworkCoPool实例)的大小 |
NetDelayD.gs
网络功能中提供延迟执行功能的模块
函数原型 | 函数作用 |
---|---|
void delay_invoke(float seconds, function func) | 延迟执行 |
void delay_invoke_in_co(float seconds, function func) | 延迟在匿名协程池(copool)中执行 |
net_ex.gs
函数原型 | 函数作用 |
---|---|
object self() | 返回pkg.net_ex对象自身 |
object start_server(string name, int port, map para = ) | 启动一个gs私有协议的服务器对象 |
object start_ws_server(string name, int port, map para = ) | 启动一个websocket协议的服务器 对象 |
void stop_server(string name) | 停止指定名称的网络服务 |
object connect(string host, int port, map para = , int timeout = 10) | 连接gs私有协议的服务器主机 |
object connect_ws(string host, int port, map para = , int timeout = 10) | 连接websocket协议的服务器主机 |
void stop_all_servers() | 停止所有服务器对象 |
map get_all_servers() | 获取所有服务器对象词典 |
void dump_servers() | 调试接口,输出监听端口信息 |
object get_server(string name) | 获取指定名称的服务器对象 |
FWsConnection.gs
使用websocket协议的连接对象
函数原型 | 函数作用 |
---|---|
function get_pack_func() | 获取消息打包方法 |
function get_unpack_func() | 获取消息解包方法 |
样例
// sample.gs
#pragma parallel
import gs.lang.*;
import gs.util.*;
import pkg.net_ex;
readonly int port := 12345;
void create()
{
net_ex.load_all_entry(__DIR__ "server_cmds/");
net_ex.load_all_entry(__DIR__ "client_cmds/");
}
public object test1()
{
map para = {
};
net_ex.start_server("a", port, para);
return net_ex.get_server("a");
}
public object test2()
{
map para = {
"auto_reconnect" : 3f, // 断线后3秒重连
"keep_alive" : 10f, // 10秒一个心跳(ping)
};
object c = net_ex.connect("127.0.0.1", port, para);
return c;
}
// client_cmds/msg_hi.gs
#pragma parallel
component pkg.net_ex.FCmdHandler;
mixed main(object conn, mixed op = nil)
{
printf("msg_hi, %M: %M\n", conn, op);
}
// server_cmds/cmd_hi.gs
#pragma parallel
component pkg.net_ex.FCmdHandler;
mixed main(object conn, mixed op = nil)
{
printf("cmd_hi, %M: %M\n", conn, op);
conn.send("msg_hi", op);
}