跳到主要内容

httpserver

简介

组件接口

FHttpCmd.gs

用于实现http指令处理对象的基础组件

函数原型函数作用
void bind_httpserver(mixed httpserver_ob = nil)将本对象对应的url绑定到目标httpserver实例上
void unbind_httpserver()将本对象对应的url从当前已绑定的httpserver实例解绑
string cmd_name()获取本指令的名称
void set_main_result_as_http_response(bool main_result_as_http_response)设置是否将main返回值当作http返回值
string get_url_path()通过http协议访问本指令的URL路径
bool require_auth_token(object req, object res)指令执行权限身份验证(本函数必须override)
function get_handler_func()获取指令处理函数

httpserver.gs

函数原型函数作用
bool is_started()httpserver 是否已经启动
void start(string name = "http server", mixed config_file = "/etc/server.json")启动默认服务器
void add_static_resource(string dir, string path = "/")添加静态资源
object listen(int port, string name = "new http server", map config = )启动一个新的服务器实例, 用于监听与默认服务器不同的端口
object listen_in_random_port(string name = "new http server")在随机端口上启动一个httpserver, 启动后可以通过 get_listen_port 获取实际监听的端口
int get_port()获取服务器业务端口号
int get_listen_port()获取服务器监听端口号
void add_handler(string url, function func)绑定 url
void remove_handler(string url)解绑定url
void add_file_handler(string url, mixed obj, string pattern = ".*")将一个 objcet 全部满足 pattern 的函数绑定到 url + 方法名上
void load_folder(string prefix, string path, string file_pattern = nil)将一个文件下的所有文件加载为 handler, 处理函数为 main
void add_dir_handler(string url, string path, string file_pattern = ".", string method_pattern = ".")一个文件夹下的满足 file_pattern 的文件中, 满足 method_pattern 的方法绑定到 url + file_name + method_name 上
void load_assets()重新加载静态资源
int get_max_header_length()获取最大 http 头的长度, 默认 100Kb
int get_max_content_length()获取最大 http 正文的长度, 默认 100Mb
void set_max_header_length(int val)设置最大 http 头的长度, 默认 100Kb
void set_max_content_length(int val)设置最大 http 正文的长度, 默认 100Mb
map get_listen_urls()获取所有监听的url
void set_debug_state(bool on)开启/关闭 debug 模式
void pin_last_request(bool update = false)将最后请求的数据保存, 方便调试
mixed replay_pin_request(bool echo = false)重新处理 pin 住的请求
mixed replay_last_request(bool echo = true)重新处理最好一个请求
map get_last_request(bool update = true)获取最后一次请求
mixed do_replay(map data, bool echo = true)手动则行请求
void set_using_gzip(bool using_gzip)设置是否开启 gzip 压缩
bool get_using_gzip()获取是否使用 gzip 压缩
object find_server_by_port(int lp)根据监听端口查找httpserver实例
void dump()调试接口,输出http监听端口信息
bool is_with_ip_v4()获取当前是否启用 ipV4
bool is_with_ip_v6()获取当前是否启用 ipV6
void set_with_ip_v4(bool v)设置是否启用 ipV4
void set_with_ip_v6(bool v)设置是否启用 ipV6

request.gs

函数原型函数作用
string get_method()获取请求方法 get, post, put ...
buffer get_content()获取 post / put 请求中的请求总体的内容
string get_url()获取正在处理的 url
string get_peer_ip()获取请求对方的 ip
string get_real_ip()获取实际请求 ip
map get_headers()获取所有请求头
map get_querys()获取所有请求参数, 包括 url 以及 请求主体的
void set_session_value(string key, mixed val)设置 session value
mixed get_session_value(string key)获取 session 的值
mixed get_query(string key)获取指定名称的参数
mixed get_header(string key)获取指定名称的header

response.gs

函数原型函数作用
void add_header(string key, mixed val)添加 header 值
void add_cookie(string key, string val)添加 cookie 值
void set_content_type(int type)设置返回内容的类型, 参考 Content_Type
void set_res_code(int code)设置请求状态码, 默认 200
void set_content(mixed val, int content_type = -1)设置返回给客户端的内容

样例


#pragma parallel
import pkg.httpserver;
import pkg.httpserver.request;
import pkg.httpserver.response;

void create()
{
// /add 会被 (: add :) 处理
httpserver.add_handler("/add", (: add :));
httpserver.add_handler("/add/:id", (: add :));


// /abc/add_server/add 会被 (: add :) 处理
httpserver.add_dir_handler("/abc", __DIR__, "add_server.gs");

// /a/add 会被 (: add :) 处理
httpserver.add_file_handler("/a", __DIR__"add_server.gs");
}

public void add(request req, response res)
{
write(req.get_querys(), "\n");
res.set_content("using code to add handler");
}
// 加载服务器
httpserver.start("test server", __DIR__"../etc/server.json");
object new_object = httpserver.listen_in_random_port("test_server");