[转]epoll 的主动式连接代码。

jackxiang 2012-10-17 11:22 | |

   大多数的epoll 代码例子是 被动连接的。  但是我的例子不一样。我是一个主动连接的代码。 因为类似爬虫这样的程序是需要主动连接服务器的。  现在我的代码很郁闷的地方 是连接数上不去,只能保持在100左右。这是个非常低的值。 我认为至少要在2000 以上才行。

代码编译正常,运行正常。也没有发现所谓的连接数变大的现象。 但就是同时的连接数很少 我这里只有140 左右。
而 如果apache 服务器在本地的话可以达到400 左右,这样的话,我仍然认为偏少。 我认为如果是局域网达到2000 应该没问题,可惜我这里上不去。  上不去的原因  第一 apache 服务器 accept 速度不够?  我认为这不太可能,不少服务同时在线4000-5000人。那么同时连接数>>400 才差不多。  第二 是代码某个地方有瓶颈? 我认为是的。 但找不到。 能给电建议吗?

要测试自己的服务器 只需要把那段http request 改成自己的就可以了。 修改一下 也可以变为灌水机,但技术含量就太低了。



原理是启动一个线称不断的建立连接 ,connect 用了阻塞的, 我认为这里效率比较低。但如果是非阻塞的话, 那么在select 同时 再建立第二个连接 是不是可以呢? 能给点代码和意见吗?

如果这个模型稳定而成功, 一个网页蜘蛛就有了个网络基础了。
root@192.168.98.128:/data0/htdocs/tmp# g++ epoll.cpp -o thread -lpthread

root@192.168.98.128:/data0/htdocs/tmp# ./thread
pthread created
now lines = 1
begin connect
epollfd = 3  
begin epoll_wait
connect failed
timeout

EOF
以上来自:http://bbs.chinaunix.net/thread-950204-1-1.html

最后:
该代码在编译时出现问题的解决:
undefined reference to 'pthread_create'问题解决
由于是Linux新手,所以现在才开始接触线程编程,照着GUN/Linux编程指南中的一个例子输入编译,结果出现如下错误:
undefined reference to 'pthread_create'
undefined reference to 'pthread_join'

问题原因:
    pthread 库不是 Linux 系统默认的库,连接时需要使用静态库 libpthread.a,所以在使用pthread_create()创建线程,以及调用 pthread_atfork()函数建立fork处理程序时,需要链接该库。

问题解决:
    在编译中要加 -lpthread参数
    gcc thread.c -o thread -lpthread
    thread.c为你些的源文件,不要忘了加上头文件#include<pthread.h>

作者:jackxiang@向东博客 专注WEB应用 构架之美 --- 构架之美,在于尽态极妍 | 应用之美,在于药到病除
地址:http://jackxiang.com/post/5669/
版权所有。转载时必须以链接形式注明作者和原始出处及本声明!

评论列表
发表评论

昵称

网址

电邮

打开HTML 打开UBB 打开表情 隐藏 记住我 [登入] [注册]