【Nginx】如何建立新连接

处理新连接事件的回调函数是ngx_event_accept,原型如下:

void ngx_event_accept(ngx_event_t *ev)

具体流程如下:

1)首先调用accept方法试图建立新连接,如果没有准备好的新连接事件,ngx_event_accept方法会直接返回

2)设置负载均衡阀值ngx_accept_disabled,这个阀值是进程允许的总连接数的1/8减去空闲连接数

3)调用ngx_get_connection方法由连接池中获取一个ngx_connection_t连接对象

4)为ngx_connection_t中的pool指针建立内存池,在这个连接释放到空闲连接池时,释放pool内存池

5)设置套接字的属性,如设为非阻塞套接字

6)将这个新连接对应的读事件添加到epoll等事件驱动模块中,这样,在这个连接上如果接收到用户请求epoll_wait,就会收集到这个事件

7)调用监听对象ngx_listening_t中的handler回调方法

最后,如果监听事件的available标志位为1,再次循环到第一步,否则ngx_event_accept方法结束。事件的available标志位对应着multi_accept配置项。当available为1时,告诉nginx一次性尽量多地建立新连接。

【Nginx】如何建立新连接

时间: 2024-11-08 11:31:43

【Nginx】如何建立新连接的相关文章

oracle 10G 表空间移动 , TNS 监听程序所有适用例程都无法建立新连接,service_died 12537, c3p0连接池参数

一次边学边干的oralce运维经历, 步步是坑啊 前几天经历了删除垃圾数据表.清理回滚表空间这些东西之后,又rebuild了索引, 感觉oracle的性能真是杠杠的. 系统又开始急速运行了. 客户经历了这事之后, 主动提出了把数据库切换到存储上面, 分配了200G. 开始干活啊, 1.先停止oracle 2.把你要移动的表空间文件复制到目的地例如:从d盘复制到E盘 3.登陆oracle sqlplus / as sysdba 4.然后执行 startup mount alter database

用VC++操作ACESS数据库(创建数据库、建立新表、连接、增删查改)

转载http://liheng19870711.blog.163.com/blog/static/8716802201121724528232/进行修改 用VC++操作ACESS数据库(创建数据库.建立新表.连接.增删查改) 首先在StdAfx.h中包含如下头文件#import "C:\Program Files\Common Files\system\ado\msadox.dll"  // 创建数据库必用#import"C:\Program Files\Common Fil

一个人也可以建立 TCP 连接呢

今天(恰巧是今天)看到有人在 SegmentFault 上问「TCP server 为什么一个端口可以建立多个连接?」.提问者认为 client 端就不能使用相同的本地端口了.理论上来说,确定一条链路,只要五元组(源IP.源端口号.目标IP.目标端口号.协议)唯一就可以了,所以这不应该是技术限制.而实际上,Linux 3.9 之后确实可以让客户端使用相同的地址来连接不同的目标,只不过要提前跟内核说好而已. 当然,你不能使用同一个 socket,不然调用connect连接的时候会报错: 1 [Er

System.getProperty()引起的悲剧--您的主机中的软件中止了一个已建立的连接

我已无法形容此刻我的心情.. 本来是已经写好的netty5的demo程序,server和client之间创建tcp长连接的..然后随便传点数据的简单demo..然后今天试了一下tcp粘包的例子,用到了System.getProperty()方法,悲剧就从此产生了..改好了程序一运行,服务器端正常启动,然后client端怎么也起不来,一启动就自动退出,完善了一下client端的异常捕获,然后就能偶尔报出些异常信息: 您的主机中的软件中止了一个已建立的连接 恰巧今天装了一些新软件和插件,挨个全都卸载

使用MySQL Workbench建立数据库,建立新的表,向表中添加数据

初学数据库,记录一下所学的知识.我用的MySQL数据库,使用MySQL Workbench管理.下面简单介绍一下如何使用MySQL Workbench建立数据库,建立新的表,为表添加数据. 点击上图中的“加号”图标,新建一个连接, 如上图,先输入数据库的账号密码,帐号默认为root,填好密码后 点击“OK”,连接就建立好了,建立完成后,会出现一个长方形的框框,双击它,出现下图所示页面 点击图中的红圈里的按钮,新建一个Schema,即数据库(个人理解..),修改一下Name 的值,如  mydat

【Nginx】事件和连接

不同的操作系统对应不同的事件驱动机制,在Linux 2.6之后使用epoll机制,对应的事件驱动模块是ngx_epoll_module.Nginx的ngx_event_core_module模块根据操作系统确定使用哪一个事件驱动模块.事件驱动模块在ngx_module_t的ctx通用接口是ngx_event_module_t,定义如下所示: typedef struct { ngx_str_t *name; // 事件模块名字 // 解析配置项之前调用,创建存储配置项参数的结构体 void *(

使用wireshark抓包分析浏览器无法建立WebSocket连接的问题(server为Alchemy WebSockets组件)

工作时使用了Websocket技术,在使用的过程中发现,浏览器(Chrome)升级后可能会导致Websocket不可用,更换浏览器后可以正常使用. 近日偶尔一次在本地调试,发现使用相同版本的Chrome浏览器,不可连接线上服务器的WS服务,但是可以连接本地的WS服务. 此时初步怀疑是服务器在某种特殊情况下会触发无法连接的问题. 使用Wireshark抓包 Filter:    ip.dst==serverIP or (ip.dst==本地IP and ip.src==serverIP) 一.查看

Socket建立网络连接方法

建立Socket连接至少需要一对套接字,其中一个运行于客户端,称为ClientSocket ,另一个运行于服务器端,称为ServerSocket . 套接字之间的连接过程分为三个步骤:服务器监听,客户端请求,连接确认. 1.服务器监听:服务器端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态,等待客户端的连接请求. 2.客户端请求:指客户端的套接字提出连接请求,要连接的目标是服务器端的套接字. 为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端套接字

【linux】——FreeBSD 建立 SSH 连接慢的解决方法

一般在编写 linux 程序的时候,会使用 SecureCRT 或者 xshell 等工具远程登录到 linux 服务器上.最近发现在建立 SSH 连接的时候,非常慢,但是建立连接成功之后可以正常使用.这个原因其实是 DNS 的问题.公司提供了两个 DNS 服务器,一个是新的,一个是老的现在作为备用.发现把 DNS 服务器改为新的之后,就不会出现这个情况.解决方案如下: vim /etc/resolv.conf 然后添加信息:  nameserver DNS地址 最后执行命令: /etc/net