获得徽章 0
赞了这篇沸点
【动效小控件】之输入框
---设计师:听我的,真的好看
---程序员:别说了,我在医院
UI志于2019-09-04 14:01发布的图片
UI志于2019-09-04 14:01发布的图片
UI志于2019-09-04 14:01发布的图片
UI志于2019-09-04 14:01发布的图片
UI志于2019-09-04 14:01发布的图片
UI志于2019-09-04 14:01发布的图片
UI志于2019-09-04 14:01发布的图片
UI志于2019-09-04 14:01发布的图片
UI志于2019-09-04 14:01发布的图片
65
m.gitee.com


Tiny & Effective Server: Xserver
Xserver是什么?
Xserver是一个完全采用C语言编写的多线程、并发型、模块化的服务器程序,支持Linux系统环境,优先采用epoll多路复用机制,具体的设计体系架构如下图所示:



Xserver的体系架构简单、性能把控度100%,因为采用C语言开发因此能够将机器的性能压榨到极致,比较适合推送服务、消息IM系统等并发场景比较高的系统使用。

扩展开发手册
扩展开发可以使用C语言或者C++语言开发,生成so文件即可,暂未处理BSD系统的kqueue机制,后续增加后支持dylib扩展,具体的开发方法如下:

Xserver默认情况下自动解析http请求协议,按照标准格式进行解析,解析的结果会通过参数返回给扩展库的回调函数的参数中,扩展方法的原型如下:

void (HTTP_FUNC)(list *request_headers, list *query_string_list);
遍历 Xserver 自带的 list 结构可以使用 Xserver宏 遍历即可:

其中 request_headers 列表中含有几个固定的键值:

字段 含义 取值
request_method 请求方法名称 GET|PUT|POST|DELETE 等等
request_uri 请求URL 除去host之后的路径取值
http_version HTTP协议版本 HTTP/1.1
http_body 请求的包主体 GET请求无包体
list *_temp = EMPTY_PTR;
LIST_FOREACH_VAL(request_headers, _temp) {

/* list_data结构体包含一个name字段:键名
* value:键值 */
list_data *_kv = (list_data *)_temp->node.data_ptr;

printf("%s:%s\t", _kv->name, _kv->value);

} LIST_FOREACH_END();
不要担心内存泄漏问题,Xserver会自动在调用库方法返回后自动释放内存。

压力测试的目标机器配置:

16GB内存,4核i5-4460 3.2GHz的INTEL CPU
压力测试命令与测试结果:

ab -n100000 -c1000 -r -k http://localhost:8181/

基本性能能够达到 4.2s完成10万请求
可以维持每秒QPS 2.38w
展开
5
下一页
个人成就
文章被点赞 3
文章被阅读 2,117
掘力值 68
收藏集
1
关注标签
24
加入于