apache的完成端口?困饶3天的问题,快哭出来了~~ 找遍整个工程 只发现一处有GetQueuedCompletionStatus 在child.c的642行里可是却没找到他投递读操作的语句(就是类似WSARecv函数之类的) 不投递一个读操作那他是怎么收发消息的呢?他收发数据的代码在哪个文件里呢? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 apache不用完成端口的,apache用的是线程池。其实大师都用最实用的技术实现高级的功能。菜鸟们整天唧唧喳喳盯着IOCP的问题问个不停,殊不知那仅仅只是一颗树而已,而根本看不到整片森林。 Apache 为 IOCP 定义了 4 种状态:typedef enum { IOCP_CONNECTION_ACCEPTED = 1, IOCP_WAIT_FOR_RECEIVE = 2, IOCP_WAIT_FOR_TRANSMITFILE = 3, IOCP_SHUTDOWN = 4} io_state_e;Apache 现在只用到了AcceptEx 和 Shutdown 状态,可能以后会用上 Recvive 和 Transmitfile 的。Apache 用线程池是因为 HTTP 这种短连接协议, Apache 用线程池也有其历史原因,但也在进化中,L/F 就是一种目标,这种模型与 IOCP 的模型是一样的。 对啊 整个连接 关闭 收发过程只找到了 accept shutdown的代码 收发的代码米找到 到底在哪里呢? 别误人子弟了,APACHE确实使用了IOCP,只是在其开源api apr中的poll组件组件中使用select来实现跨平台的POLL的WIN32模型,只是因为IOCP在调用方面和linux的poll/epoll有些不同。 印像中apache中用iocp来acceptex的。 其他地方应该的确没有使用iocp 楼上讲的是啊 确实acceptex是iocp来的 其他都没有IOCP的影子 可是找不到收发的代码 ~ to Analyst():线程池和IOCP又没有冲突。据我所指,apache内部也是使用IOCP的,当然,线程池也是有的。我没有看过apache源代码,但是看过一份apache详细的工作原理图。 在apache中无法找到GetQueuedCompletionStatus可能是因为apache将这些功能封装在他所依赖的库里(比如mymmsc(热血老猫)所说的apr)。 我倒,2.X以上版本中是有的,1.X我没有研究过,GetQueuedCompletionStatus在D:\MyMMSC\projects\c\httpd-2.2.4\server\mpm\winnt\child.c(702),在apache httpd服务器端程序,对于SERVER端采用了分开处理的模式,也就是MPM模型对于不同的平台处理方式不同,其他操作系统先不讨论,winnt/prefork,分别对应win32/unix/linux,在win32中使用了iocp,而prefork则使用跨平台的apr_poll组件,不同的类unix系统可能会是不同的,如linux的poll/epoll和freebsd的kqueue。IOCP是通过投递(Post。)一个重叠IO操作来完成收发的,不是传统的WSARecv(。&pol)的方式,仔细研究一下吧。 apr里面没有完成端口的部分。ntmpm似乎依然是线程池+进程池来处理。 今天我也看了一下apache2.2.4的源代码。怎么看都没找到用iocp发送和接受的影子,除了用于accept之外,似乎都是同步操作(aprlib里的)+线程池来处理。mymmsc(热血老猫) 说的PostQueuexxx/GetQueuexxx的仅仅用于关闭套接字的。 神了,同样的组件,用VB调用一切正常,用VC就是失败! Toolbar上的文字颜色 请问用api编程时,能否用资源文件 formview上的控件是不是不能用汉字名啊 帮帮忙啊.如何在VC6上使用GDI+库啊?哪有下载啊? 我的程序退出后,系统的运行的进程中还有显示,再运行的程序中没有显示,为什么? 求canny算子的vc源程序:[email protected] 急!!!!! View的初始化问题 哪有 精通vc++图象编程 的书下载啊? 动态库中的资源怎样才能不互相干扰 如何获得网关IP 请问谁有开发过在线收发短信程序的经验
其实大师都用最实用的技术实现高级的功能。菜鸟们整天唧唧喳喳盯着IOCP的问题问个不停,殊不知那仅仅只是一颗树而已,而根本看不到整片森林。
IOCP_CONNECTION_ACCEPTED = 1,
IOCP_WAIT_FOR_RECEIVE = 2,
IOCP_WAIT_FOR_TRANSMITFILE = 3,
IOCP_SHUTDOWN = 4
} io_state_e;Apache 现在只用到了AcceptEx 和 Shutdown 状态,可能以后会用上 Recvive 和 Transmitfile 的。
Apache 用线程池是因为 HTTP 这种短连接协议, Apache 用线程池也有其历史原因,但也在进化中,L/F 就是一种目标,这种模型与 IOCP 的模型是一样的。
我没有看过apache源代码,但是看过一份apache详细的工作原理图。
D:\MyMMSC\projects\c\httpd-2.2.4\server\mpm\winnt\child.c(702),
在apache httpd服务器端程序,对于SERVER端采用了分开处理的模式,也就是MPM模型对于不同的平台处理方式不同,其他操作系统先不讨论,winnt/prefork,分别对应win32/unix/linux,在win32中使用了iocp,而prefork则使用跨平台的apr_poll组件,不同的类unix系统可能会是不同的,如linux的poll/epoll和freebsd的kqueue。
IOCP是通过投递(Post。)一个重叠IO操作来完成收发的,不是传统的WSARecv(。&pol)的方式,仔细研究一下吧。
ntmpm似乎依然是线程池+进程池来处理。