>백엔드 개발 >PHP 튜토리얼 >Apache、PHP、SOAP怎样配合工作

Apache、PHP、SOAP怎样配合工作

WBOY
WBOY원래의
2016-06-23 14:01:22857검색

本人刚解除PHP,最近本人使用PHP自带的SOAP实现服务端的RPC功能。
看了很多server.php的例子,这些例子也能工作,但我还是产生了疑问。
一般server.php的代码是这样的:
1. 创建一个类,其中有若干成员函数。
2. 调用函数SoapServer()创建一个服务。
3. 将类中的函数进行注册。
4. 调用handle()函数处理客户端的RPC调用请求。
5. handle()函数返回后,本次服务算是结束。

如果只有一台PC发起客户端请求,apache服务器很容易应付。但如果有成千上万个client请求,
按上面的流程处理,岂不是要创建n次服务例程,销毁n次例程,效率低下可想而知。
或许php不是这样工作的,那么当收到n个(数量多)服务请求时,apache、PHP是怎样处理SOAP请求的呢。
只需大概讲一下处理流程。


回复讨论(解决方案)

是要创建n次服务例程,销毁n次例程
但是, 效率低下可想而知 这样的结论就太武断了
web 服务使用的是无状态的 http 协议,既然是无状态的,那么就不需要服务器端的持久对象
况且 SoapServer()创建一个服务 中的服务只是一个名称而已,并非真正意义上的服务

让程序实际跑跑看吧~ 装个xhprof再压测一下,看下性能瓶颈在哪~
当然,小弟弟我没弄过RPC,但是一般情况下,在“对象创建”和“函数调用”成为瓶颈之前,会有更多更麻烦的地方成为瓶颈,比如数据库效率、白白占用资源的业务代码或者没活跃用户导致项目不再开发等等~

是要创建n次服务例程,销毁n次例程
但是, 效率低下可想而知 这样的结论就太武断了
web 服务使用的是无状态的 http 协议,既然是无状态的,那么就不需要服务器端的持久对象
况且 SoapServer()创建一个服务 中的服务只是一个名称而已,并非真正意义上的服务

不太同意部分观点。
是否应该在服务端放一个持续存在的对象跟http协议无状态没啥关系,服务端资源毕竟是有限的,对其反复“连接?断开”、“查询?释放”会白白造成不必要的开销,这时候有个持续存在的对象来保持这些数据,不去反复请求外部资源就太美好了。

顺便求版主帮反馈一下:改善下论坛的文字编辑体验,目前的这个既不是“所见即所得”又不是“主流通用”如markdown,wiki,真的很难上手诶,一不小心改错了提交后又没有纠正的机会。

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.