![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Haproxy源码分析
文章平均质量分 78
白色的乌云
为人方面,我是一个乐观向上、工作充满激情、对未来有美好向往的年轻小伙子。我对自己充满信心,无论是做过的事,还是对于一件新鲜的事情,我都会努力去做,并且尽自己的能力将它做好;我为人很谦虚,只要别人在某方面比我强,我就会很谦虚的去请教。 <br/>技术方面,我熟悉C语言,熟悉make工具,熟悉Unix/Linux开发环境,熟练使用shell;熟悉socket编程,熟悉TCP/IP协议,熟悉多线程、多进程编程;能够使用汇编进行编程;对Linux内核有所了解,包括进程管理、内存管理、中断处理、以及传统的Unix进程间通信。
展开
-
五、listener fd的初始化
Listener fd的创建以及监听代码位于[src/proto_tcp.c]的tcp_bind_listener函数中。[src/proto_tcp.c] tcp_bind_listener()int tcp_bind_listener(struct listener *listener, char *errmsg, int errlen){ __label__ tcp_retu原创 2013-04-28 00:11:58 · 1135 阅读 · 0 评论 -
十、任务调度(二)
Eb32treeEb32tree是Ebtree32位版本的一个具体实现。[ebtree/eb32tree.h]/* This structure carries a node, a leaf, and a key. It must start with the * eb_node so that it can be cast into an eb_node. We could al原创 2013-05-31 20:52:58 · 964 阅读 · 0 评论 -
八、Session的处理
在event_accept小节曾经说过task的process成员是来自于listener的handler成员,而listener的handler成员是在解析配置文件时设置为process_session的。那么接下来就看看Haproxy最主要的任务处理过程是怎么样的。[sec/sessiom.c]process_session()/* Processes the client, serv原创 2013-05-01 23:38:19 · 1196 阅读 · 0 评论 -
七、Tcpv4_connect_server函数
[src/proto_tcp.c] tcpv4_connect_server()int tcpv4_connect_server(struct stream_interface *si, struct proxy *be, struct server *srv, struct sockaddr *srv_addr, struct sockaddr *from_addr)原创 2013-05-01 23:08:04 · 944 阅读 · 0 评论 -
一、概述
在具体的分析程序源代码之前,我准备先看一下Haproxy的doc目录下的architecture.txt文件。作者在此文件中说,由于涉及到解释性的脚本语言,一个网络应用程序的前端服务器SERVER往往都会承受非常大的压力;当然这也可能依赖于相对压力不是很大的后端的数据库服务器DB。(对于后者,我的理解是当DB慢一点的话,SERVER对于请求的响应就没那么快,新的请求又来到,又要分配新的资源,造原创 2013-04-22 21:24:32 · 1562 阅读 · 0 评论 -
二、信号
数据结构[include/types/signal.h]struct signal_descriptor { int count; /* number of times raised */ void (*handler)(int sig);};struct signal_descriptor signal_state[MAX_SIGNAL];int signal_qu原创 2013-04-27 23:34:03 · 1172 阅读 · 0 评论 -
六、event_accept函数
此函数对应于Listner在有新链接的时候调用的read函数。[src/client.c]event_accept()int event_accept(int fd) { struct listener *l = fdtab[fd].owner;//这个值从前一部分可知 struct proxy *p = (struct proxy *)l->private; //这是在解析配置文原创 2013-04-28 00:24:28 · 1218 阅读 · 0 评论 -
四、时间
对于一个服务器来说,它对时间的要求并不是特别高,因此可以在程序中维护一个时间,然后在某些条件触发时对这个时间进行更新,程序中的时间均使用这个维护的时间量,这样做能避免每次需要时间的时候进行一次耗时的系统调用,提升程序性能。在Haproxy中,作者正是这样做的。数据结构[src/time.c]unsigned int curr_sec_ms; /* millisecond原创 2013-04-28 00:02:08 · 873 阅读 · 0 评论 -
三、I/O模型
数据结构[include/types/fd.h]/* info about one given fd */struct fdtab { struct { int (*f)(int fd); /* read/write function */ struct buffer *b; /* read/write buffer */ } cb原创 2013-04-27 23:57:00 · 1217 阅读 · 0 评论 -
九、任务调度(一)
Haproxy的任务调度机制使用的数据结构为弹性二叉树(Ebtree),从源文件中的介绍,应该是作者自己创作并命名的。本节将会介绍Ebtree的基本概念以及作者实现的一些通用操作。概念对于Ebtree的描述如下[ebtree/ebtree.h]/* General idea: ------------- In a radix binary tree, we m原创 2013-05-29 21:58:39 · 929 阅读 · 0 评论