跳到主要内容

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

网络服务器基础组件

函数原型函数作用
bool start()启动服务
void stop()停止服务
mixed get_property(string property_path)获取属性值
string get_name()获取名称
int get_port()获取服务端口(监听端口)
void on_new_connection(object socket_server_client_ob)事件处理 - 新连接建立
void on_lost_connection(object socket_server_client_ob)事件处理 - 连接丢失
void on_message(object socket_server_ob, object socket_server_client_ob, mixed payload)事件处理 - 消息处理
void on_pingpong(object socket_server_ob, bool ping, object socket_server_client_ob, mixed palyload = nil)事件处理 - ping/pong消息处理

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);
}