日期:2014-05-16  浏览次数:20498 次

Apache、PHP、SOAP怎样配合工作
本人刚解除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()创建一个服务 中的服务只是一个名称而已,并非真正意义上的服务
------解决方案--------------------
引用:
是要创建n次服务例程,销毁n次例程
但是,效率低下可想而知 这样的结论就太武断了
web 服务使用的是无状态的 http 协议,既然是无状态的,那么就不需要服务器端的持久对象
况且 SoapServer()创建一个服务 中的服务只是一个名称而已,并非真正意义上的服务


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

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