在php中使用ice注意事项
2010-10-02 09:33
651 查看
因为php是作为一脚本解释执行的,所以在ice中,只能用来作客户端,因为php不支持多线程。因为php脚本固有的一些性质,所以在使用
php的时候要注意一些地方,这些地方是影响php与ice使用性能的地方。
php中通信器($communicator),可以把代码写成如下的方式
这样也提高的了php的执行效率,也节省了代码。
可以在php.ini中配置一下ice的属性,所以在web 服务器启动的时候就加载,每一次请求的时候就没有必要在重新加载配置文件了。
但是现有也有一个问题,可能在web服务器中有多个应用程序,每一个应用程序都有一同的配置属性,那就在php.ini中的配置就得作如下改动。
; Snippet from php.ini on Linux
ice.profiles=/opt/MyApp/profiles
在profiles文件中可以这样写,也就是每一个应用的名字用中括号,如[Production],[Debug]:
[Production]
config=/opt/MyApp/prod.cfg
options="..."
[Debug]
config=/opt/MyApp/debug.cfg
options="--Ice.Trace.Network=3 ..."
每一个应用程序都可以配置不同的属性,只根加名字区别就可以了
如果你添加了一个名字,那就返回与名字相同的属性,如Ice_getProperties("Production")属性;
Ice_register($communicator, $name, $expires=0)
此函数就是把一个Communicators放到session中,第一个参数$communicator是一个Communicator的实例,第一个参数是名字,
第三个参数是此$communicators的有交期,默认是一直有效.
Ice_unregister($name)
这一个函数和刚才Ice_register正好相反,他是释放名字为$name的Communicator对象。
Ice_find($name)
此函数是取出名字为$name且已经用Ice_register放进session中的Communicator对象。
我们现在的代码可以写成这样。
php的时候要注意一些地方,这些地方是影响php与ice使用性能的地方。
常规写法
在php去使用ice一般会有如下的代码<?php require 'Ice.php'; require 'Hello.php'; $communicator = null; try { $data = new Ice_InitializationData; $data->properties = Ice_createProperties(); $data->properties->load("props.cfg"); $communicator = Ice_initialize($data); $proxy = $communicator->stringToProxy("..."); $hello = Demo_HelloPrxHelper::checkedCast($proxy); $hello->sayHello(); } catch(Ice_LocalException $ex) { // Deal with exception... } if($communicator) { try { $communicator->destroy(); } catch(Ice_LocalException $ex) { // Ignore. } } ?>
自动释放Communicator对象
因为php脚本有一个特点就是当请求结束时,php脚本解释器会释放所有的与刚才请求相关的资源和对像,所以我们没有必要人为的去释放php中通信器($communicator),可以把代码写成如下的方式
<?php require 'Ice.php'; require 'Hello.php'; try { $data = new Ice_InitializationData; $data->properties = Ice_createProperties(); $data->properties->load("props.cfg"); $communicator = Ice_initialize($data); $proxy = $communicator->stringToProxy("..."); $hello = Demo_HelloPrxHelper::checkedCast($proxy); $hello->sayHello(); } catch(Ice_LocalException $ex) { // Deal with exception... } ?>
这样也提高的了php的执行效率,也节省了代码。
属性配置文件
如果每次请求都去读取ice的配置文件,php在读取文件时的效率不是很高,因为任何与系统调用都会有不小的开销,可以在php.ini中配置一下ice的属性,所以在web 服务器启动的时候就加载,每一次请求的时候就没有必要在重新加载配置文件了。
; Snippet from php.ini on Linux extension=IcePHP.so ice.config=/opt/MyApp/default.cfg ice.options="--Ice.Override.Timeout=2000"
但是现有也有一个问题,可能在web服务器中有多个应用程序,每一个应用程序都有一同的配置属性,那就在php.ini中的配置就得作如下改动。
; Snippet from php.ini on Linux
ice.profiles=/opt/MyApp/profiles
在profiles文件中可以这样写,也就是每一个应用的名字用中括号,如[Production],[Debug]:
[Production]
config=/opt/MyApp/prod.cfg
options="..."
[Debug]
config=/opt/MyApp/debug.cfg
options="--Ice.Trace.Network=3 ..."
每一个应用程序都可以配置不同的属性,只根加名字区别就可以了
在php中使用属性
在php中用Ice_getProperties这一个函数,可以得到属性配置信息,如果Ice_getProperties()不添加任何参数,那就返回默认的属性。如果你添加了一个名字,那就返回与名字相同的属性,如Ice_getProperties("Production")属性;
在session中保存通信器(Communicators)
如果每次请求都实例化Communicators,那么此开销是相当的大,ice为了提升性能,特别用几个有用的函数来解决此问题Ice_register($communicator, $name, $expires=0)
此函数就是把一个Communicators放到session中,第一个参数$communicator是一个Communicator的实例,第一个参数是名字,
第三个参数是此$communicators的有交期,默认是一直有效.
Ice_unregister($name)
这一个函数和刚才Ice_register正好相反,他是释放名字为$name的Communicator对象。
Ice_find($name)
此函数是取出名字为$name且已经用Ice_register放进session中的Communicator对象。
我们现在的代码可以写成这样。
<?php require 'Ice.php'; $communicator = Ice_find('MyCommunicator'); $expires = ...; if($communicator == null) { $communicator = Ice_initialize(...); Ice_register($communicator, 'MyCommunicator', $expires); } ... ?>
相关文章推荐
- 使用PHP Manager for IIS时,Windws 10自带IIS注意事项
- PHP使用eval()函数的注意事项
- laravel 5.1下php artisan migrate的使用注意事项总结
- PHP中$_FILES的使用及注意事项
- PHP使用mail()函数发送邮件流程以及注意事项
- php 使用cURL发起https(ssl)请求时注意事项
- PHP 字符串 操作符<<< 使用的注意事项
- 使用php webservice(SOAP)的注意事项
- php使用saop简单例子和注意事项
- php学习笔记(三十四)smarty框架的初步使用和注意事项
- 对php cookie技术的再次理解及使用注意事项
- laravel5.1下php artisan migrate使用注意事项
- php使用js保存的json cookie 字符串,然后解析成数组,需要注意的事项
- PHP使用curl函数发送Post请求的注意事项
- Netbeans使用xdebug插件调试PHP程序的一个注意事项
- PHP中$_FILES的使用及注意事项
- 使用php mongodb扩展时比较需要注意的事项
- PhpExcel的使用、示例及注意事项
- php inc文件使用的风险和注意事项
- PHP callback函数使用方法和注意事项