- 论坛徽章:
- 0
|
本帖最后由 c04n05 于 2013-01-24 16:12 编辑
原谅我是长期潜水党。。
最近做一个php扩展实现这么一个功能:读配置文件与建立连向若干个服务器的连接池,php函数先获取连接-->发送到服务器-->收取服务器返回数据-->释放连接
用到了libevent 2.0.21-stable
目前是demo代码,所以只连了一个服务器,用了一个线程和一个event_base。
在创建event_base之前有调用evthread_use_pthreads() //for thread safe
调用如下接口进行发送数据:
if (0 != bufferevent_write(bev, (void*)send_buffer, msg_len + 4))
{
syslog(LOG_ERR, "send message failed\n");
free(send_buffer);
return 0;
}
目前的情况是我把接口整理一下,写一个main函数来调用然后编译成可执行程序的时候一切正常。
但是编译成php扩展,启动web服务器之后发现那个bufferevent_write也是返回0,即发送成功,但是服务器并没有收到数据。。。。
试过设置TCPNODELAY和bufferevent的watermark。php扩展的问题依旧。
我把和这个bufferevent关联的socket fd拿出来用send去发送的话,服务器是能收到数据的:
send(ptr_conn->socket_fd, send_buffer, msg_len + 4, 0);
按照这个帖子:http://rdc.taobao.com/blog/cs/?p=1235
去单步我这个函数的时候数据也发送成功了。。。
因此现在怀疑是event_base_dispatch函数的问题。但是现在我不知道有什么办法可以跟踪到这个函数
熟悉libevent的童鞋们请指点下。。。
有啥好的调试办法也请指点。。。
环境nginx + php-fpm + debian 6 |
|