免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2073 | 回复: 1
打印 上一主题 下一主题

[C] libevent应用在php c扩展下的奇怪问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-01-24 15:02 |只看该作者 |倒序浏览
本帖最后由 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

论坛徽章:
0
2 [报告]
发表于 2013-01-26 10:43 |只看该作者
找到原因了。。nginx通过php-fpm解析php。。php-fpm是一个多进程的东西。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP