ub_server_running_worker_thread_main_loop
2016-06-22 19:12:45 0 举报
`ub_server_running_worker_thread_main_loop` 是一个函数或方法,用于在服务器上运行工作线程的主循环。它负责处理来自客户端的请求,执行相应的任务,并将结果返回给客户端。这个主循环会一直运行,直到服务器关闭或出现异常情况。在这个循环中,工作线程会不断地接收新的请求,处理它们,并保持与客户端的通信。这个函数通常用于实现多线程服务器,以提高系统的并发能力和响应速度。
作者其他创作
大纲/内容
return ret;
static int rpc_handle_callback()
创建本thread专用epolldata-epfd = xpool_epoll_create();
执行内层回调函数真正处理本次请求sev-cb_drastic();
Y
按长连接处理,继续循环等待处理同一链接上的下个请求
执行外层回调函数真正地处理本次请求sev-cb_native() == 0
按短链接处理,关闭本次链接回到主循环,等待处理新的链接
获取本线程的per-thread数据结构ub_server_pdata_t *data = (ub_server_pdata_t *)param;set_pthread_data(data);
N
内循环每次循环处理同一链接的不同请求
全局ub server结构体仍然处于运行状态while (sev-run)
server处理链接类型是否只处理短链接?UBSVR_SHORT_CONNECT ?
是否有事件?ret 0 ?
这一步,找出的handler函数是通过宏定义的XXX_handle_request形式的函数,里面的实际内容是调用dispatch_call函数在dispatch_call函数里面,才会真正地从本thread的thread_instance_data里面的handlers_map中找到cmd对应的我们自定义的如create_direct_trans这样的class的service_handler_wrapper对象,再通过它来执行create_direct_trans这个class的handle函数来实际处理请求
获得本线程per-thread的读写缓冲区并设置好读写缓冲区内请求头、请求体、响应头的地址nshead_t *inhead = (nshead_t *)in;nshead_t *outhead = (nshead_t *)out;mc_pack_t *inpack = (mc_pack_t *)(inhead + 1);mc_pack_t *outpack = NULL;
do ...
获取本线程per-thread的读写缓冲区地址和大小nshead_t *req = (nshead_t *)ub_server_get_read_buf();int reqsiz = ub_server_get_read_size();nshead_t *res = (nshead_t *)ub_server_get_write_buf();int roto = ub_server_get_read_timeout();int wtto = ub_server_get_write_timeout();
int default_native()
return 0;
按mcpack协议将响应体打包并根据最终响应体内容更新响应头mc_pack_close(outpack);outhead-body_len = mc_pack_get_size(outpack);
void *_xpool_main(void *param)
如果全局ub server结构体仍然处于运行状态while (sev-run)
主循环每一次循环处理不同链接
0 条评论
下一页