> 백엔드 개발 > PHP 튜토리얼 > php c扩展的问题请大家帮帮我

php c扩展的问题请大家帮帮我

WBOY
풀어 주다: 2016-06-23 14:11:22
원래의
1040명이 탐색했습니다.


我用php扩展与 c 程序通信, php扩展作为client, c程序作为server且一直在监听所有的连接描述符;
php扩展中如果已经connect成功后, 那么以后的php请求都用同一个socket;
但是我在测试过程中发现,假如server重启,php扩展再也无法正常与server通信, php扩展向server发请求(send)后会接受到 broken pipe的错误;

我在php扩展中做的处理是 假如send 或recv失败 就重新关闭链接重连;

同样的代码我在纯c环境中测试没问题. 但是放在php中 就不行

求帮忙 谢谢


回复讨论(解决方案)

编译扩展后在php中执行不行?

问题根源已找到,
apache会启动多个httpd, 每个httpd都会加载php扩展, 也就是说httpd都会与tcp server 通信
当server 重启后, php请求通过某个httpd向server send消息, 返回一个broken pipe信号, httpd进程默认被终止. 然后php请求又通过其他httpd发请求,其他的httpd同样的也会被终止, 当所有的httpd都被重启后, 通信就不会再产生broken pipe信号

问题根源已找到,
apache会启动多个httpd, 每个httpd都会加载php扩展, 也就是说httpd都会与tcp server 通信
当server 重启后, php请求通过某个httpd向server send消息, 返回一个broken pipe信号, httpd进程默认被终止. 然后php请求又通过其他httpd发请求,其他的httpd同样的也会被终止, 当所有的httpd都被重启后, 通信就不会再产生broken pipe信号


顺便问一下,楼主有什么php扩展的资料不??
能否共享一下?

http://www.laruence.com/2009/04/28/719.html
还有一个
PHP内核介绍及扩展开发指南
自己百度吧

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿