为什么80%的码农都做不了架构师?>>>
ICE的通讯结构:
ICE有分为提供服务的一方Server和寻求服务的一方Client,两台机子上都需要安装ICE组件,他们的通信结构如上图
Client端应该事先知道Server端能提供的服务是什么,有什么格式?这就是图中的Proxy Code,在Proxy Code中定义好了类和接口。Server端中接口定义的就是
Skeleton,具体实现接口的是Server Application,Server Application可以是C++,java,C#等写的,但是ICE不提供PHP写Server端。
ICE安装方式:
1.redhat5:(ice3.4.2) yum源安装
01.download: cd /etc/yum.repos.d/ wget https://zeroc.com/download/Ice/3.4/rhel5/zeroc-ice.repo
如果无法下载以上地址,可能使被墙了,试试:wget http://www.zeroc.com/download/Ice/3.4/rhel5/zeroc-ice.repo
zeroc-ice.repo的内容为:
[zeroc-ice]
name=Ice 3.4 for RHEL $releasever - $basearch
baseurl=http://www.zeroc.com/download/Ice/3.4/rhel$releasever/$basearch
enabled=1
gpgcheck=1
gpgkey=http://www.zeroc.com/download/RPM-GPG-KEY-zeroc-release
02.编辑zeroc-ice.repo:
[zeroc-ice]
name=Ice 3.4 for RHEL $releasever - $basearch
baseurl=http://www.zeroc.com/download/Ice/3.4/rhel5/$basearch
enabled=1
gpgcheck=1
gpgkey=http://www.zeroc.com/download/RPM-GPG-KEY-zeroc-release
03.查看 yum list ice* db46* mcpp-devel 或 yum list ice* db48* mcpp-devel(官方)
04.安装 yum install ice* db46* mcpp-devel 或 yum list ice* db48* mcpp-devel(官方)
05.emacs /etc/php.d/ice.ini 内容:extension=IcePHP.so
06.修改php.ini extension=IcePHP.so 并把IcePHP.so复制到extentsion_dir中
注意:这种方法的IcePHP.so module是官方编译的,只能适合官方指定的php版本:这里是php5.1.6
2.redhat5:(ice3.4.2) 编译安装64位(注意我的是64位操作系统,32位安装没有什么特别的地方)
附上官方安装说明:
This source distribution only supports building Ice for PHP as a dynamic PHP extension; the product of the build is a shared library
that you must configure PHP to load. Follow the steps below to build Ice for PHP:
1. Change to Ice for PHP source subdirectory.
> cd Ice-3.4.2/php
2. Edit config/Make.rules and review the build settings. For example, you may want to enable OPTIMIZE. If your PHP installation resides
in a non-standard location, modify the PHP_HOME setting to contain the installation directory. If you are using PHP 5.3 or later and
wish to use PHP namespaces, set USE_NAMESPACES=yes.
3. If you have not built Ice for C++ from the cpp subdirectory, then set the ICE_HOME environment variable to the directory containing
your Ice installation. For example, if Ice is installed in /opt/Ice-3.4.2, set ICE_HOME as follows: $ export ICE_HOME=/opt/Ice-3.4.2
If you installed Ice using RPMs, set ICE_HOME as shown below:
$ export ICE_HOME=/usr
3. Run make.
说明:如果按照官方来安装是不可能安装成功的,从安装步骤编号1233就可以看出官方安装说明写得有多草率!
我的安装记录:
下载源码安装包Ice-3.4.2.tar.gz和第三方依赖包ThirdParty-Sources-3.4.2.tar.gz(官网有下载连接,这里就不贴了,一定要求去官网下载)
先解压ThirdParty-Sources-3.4.2.tar.gz : tar –xvf ThirdParty-Sources-3.4.2.tar.gz
Cd ThirdParty-Sources-3.4.2
安装 mcpp-2.7.2:
tar -xvf mcpp-2.7.2.tar.gz
cd mcpp-2.7.2
./configure --prefix=/usr/local/ICE-3.4.2/mcpp-2.7.2/ CFLAGS=-fPIC --enable-mcpplib --disable-shared
make
make install
...On 64-bit platforms, after installation it is necessary to rename the
library installation directory from $(prefix)/lib to $(prefix>/lib64.(这句话是说把安装的mcpp目录中的lib目录名改成lib64,32位无需改动)
安装Berkeley DB:
tar -xvf db-4.8.30.NC.tar.gz
cd db-4.8.30.NC/build_unix/
../dist/configure --prefix=/usr/local/ICE-3.4.2/BerkeleyDB.4.6/ --enable-cxx
make
make install
...On 64-bit platforms, after installation it is necessary to rename the
library installation directory from $(prefix)/lib to $(prefix>/lib64.(这里也要把lib—> lib64)
安装bzip2:
cd ../../
tar -xvf bzip2-1.0.6.tar.gz
cd bzip2-1.0.6
//32位机器:Makefile PREFIX=/usr/local/ICE-3.4.2/bzip2-1.06
//64位机器:make -f Makefile-libbz2_so
make
make install PREFIX=/usr/local/ICE-3.4.2/bzip2-1.06
...On 64-bit platforms, after installation it is necessary to rename the
library installation directory from $(prefix)/lib to $(prefix>/lib64. (这里也要把lib—> lib64)
安装expat:
cd ..
tar -xvf expat-2.0.1.tar.gz
cd expat-2.0.1
./configure --prefix=/usr/local/ICE-3.4.2/expat-2.0.1/
make
make install
...On 64-bit platforms, after installation it is necessary to rename the
library installation directory from $(prefix)/lib to $(prefix>/lib64. (这里也要把lib—> lib64)
安装oppenssl:
cd ..
tar -xvf openssl-0.9.8r.tar.gz
cd openssl-0.9.8r
./config --prefix=/usr/local/ICE-3.4.2/openssl
make
make install
//好像不需要改成lib64,(这里我没改lib64就安装成功了,注意每次重新安装的时候记得先清理一下:make clean)
redhat5.7在默认情况下会在usr/lib中搜索*.so,但在64位系统中*.so在usr/lib64和usr/local/lib64中,故要将包含对应xx.so文件拷贝到usr/lib中,更简单的做法是加入到LD_LIBRARY_PATH变量中,如下面/etc/profile的修改
安装Ice3.4.2
tar -xvf Ice3.4.2.tar.gz
cd Ice3.4.2/cpp
emacs(or vim) conf/Make.rules
将刚刚安装的所有的第三方依赖包的路劲填入
如: BZIP2_HOME ?= /usr/local/ICE-3.4.2/bzip2-1.0.6
指定ice的安装路径(两个):
prefix
embedded_runpath_prefix
填完后保存 make ; make install
没有报错安装完成Ice3.4.2
修改/etc/profile:在尾部加上
export PHPPATH=/wdxy/ICE-3.4.2/Ice-3.4.2/php/:
export ICE_HOME=/wdxy/ICE-3.4.2/Ice-3.4.2
export PATH=$PATH:$ICE_HOME/bin
export LD_LIBRARY_PATH=$ICE_HOME/lib64:/usr/local/ICE-3.4.2/expat-2.0.1/lib64:$LD_LIBRARY_PATH
export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE INPUTRC ICE_HOME
source /etc/profile
运行: icegridnode -v
3.4.2 (安装成功)
编译生成动态库IcePHP.so
cd ../php
emacs config/Make.rule.php四处:
prefix ?= /wdxy/ICE-3.3.0/Ice-$(VERSION)
embedded_runpath_prefix ?= /wdxy/ICE-3.3.0/Ice-$(VERSION_MAJOR).$(VERSION_MINOR)
PHP_HOME ?= /home/ap/php5.2 //注意是PHP_HOME目录,不是bin/php 或php执行文件的路径(我在这里坑了半天,报unkown php version ) 后面会附上php5.2.17 php-fpm的安装
LP64 := yes
make
make install
将会在/wdxy/ICE-3.3.0/Ice-$(VERSION)目录下生成php文件夹,内有IcePHP.so文件,拷贝到对应php的extension_dir下
php -i | grep extension_dir 查看extension_dir
修改php.ini文件:
[Ice]
include_path = "/home/ap/php5.2/lib/php:/wdxy/ICE-3.4.2/Ice-3.4.2/php"
extension=IcePHP.so
php -m 可以看到ice模块的存在表示安装成功
Icephp安装配置完成
Nginx + php5.2.17 + php-fpm的安装(php-fpm在php5.3以后才是php的内置模块)
http://us.php.net/distributions/php-5.2.17.tar.gz
http://php-fpm.org/downloads/php-5.2.17-fpm-0.5.14.diff.gz
http://nginx.org/download/nginx-1.8.1.tar.gz
tar -xvzf php-5.2.17.tar.gz
gzip -cd php-5.2.17-fpm-0.5.14.diff.gz | sudo patch -d php-5.2.17 -p1
cd php-5.2.17
./configure --prefix=/home/ap/php5.2 -enable-fastcgi -with-config-file-path=/home/ap/php5.2/etc -with-openssl -enable-fpm -enable-mbstring -with-freetype-dir -with-jpeg-dir -with-png-dir -with-zlib-dir -with-libxml-dir -enable-xml -with-mhash -enable-pcntl -enable-sockets -with-bz2 -with-curl -with-curlwrappers -enable-mbregex -with-gd -enable-gd-native-ttf -enable-zip -enable-soap -with-iconv -enable-bcmath -enable-shmop -enable-sysvsem -enable-inline-optimization -with-ldap -with-ldap-sasl -enable-pdo
注:这里我没有安装mysql模块,你可以选择的加上mysql模块
可能用到的依赖:
yum install openldap openldap-devel -y
cp -frp /usr/lib64/libldap* /usr/lib/
yum install libmcrypt libmcrypt-devel
yum install mhash-devel
make
make install
安装php成功
查看php.ini的路径 php –i | grep php.ini
从源码中拷贝一份到对应的目录中
cp sapi/cgi/fpm/php-fpm /etc/init.d/
chmod +x /etc/init.d/php-fpm
cp /usr/src/php-5.2.17/php.ini-recommended /usr/local/lib/php.ini
mkdir /etc/php/
ln -s /usr/local/lib/php.ini /etc/php/php.ini
ln -s /usr/local/etc/php-fpm.conf /etc/php/php-fpm.conf
安装php5.2 + php-pmp成功
/etc/init.d/php-fpm5.2.17 start
/etc/init.d/php0fpmt.3.17 stop
ps -ef|grep php
安装nginx
tar -xvf nginx-1.8.1.tar.gz
cd nginx-1.8.1
./configure --prefix=/wdxy/nginx --user=nobody --group=nobody --with-http_ssl_module --without-mail_pop3_module --without-mail_imap_module --without-mail_smtp_module --with-http_stub_status_module --with-pcre
yum install pcre
yum install pcre-devel
cd sbin
./ngix启动
./nginx -s reload重新加载
ps -ef|grep nginx
最后附上nginx.conf:
#user nobody;
#worker_processes 1;
worker_processes 4;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
server {
#listen 80
listen 8054 default backlog=1024;
server_name localhost;
#server_name webim.whwdxy.com;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm index.php index.jsp;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
#root html/webim.whwdxy.com;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}
location ~ \.php(.*)$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_split_path_info ^((?U).+\.php)(/?.+)$;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
include fastcgi_params;
# add 7 line
fastcgi_read_timeout 300;
fastcgi_buffers 8 128k;
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_buffer_size 64k;
fastcgi_busy_buffers_size 128k;
fastcgi_temp_file_write_size 128k;
}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
# another virtual host using mix of IP-, name-, and port-based configuration
#
#server {
# listen 8000;
# listen somename:8080;
# server_name somename alias another.alias;
# location / {
# root html;
# index index.html index.htm;
# }
#}
# HTTPS server
#
#server {
# listen 443 ssl;
# server_name localhost;
# ssl_certificate cert.pem;
# ssl_certificate_key cert.key;
# ssl_session_cache shared:SSL:1m;
# ssl_session_timeout 5m;
# ssl_ciphers HIGH:!aNULL:!MD5;
# ssl_prefer_server_ciphers on;
# location / {
# root html;
# index index.html index.htm;
# }
#}
}
php-fpm.conf:
All relative paths in this config are relative to php's install prefix
Pid file
Error log file
Log level
When this amount of php processes exited with SIGSEGV or SIGBUS ...
... in a less than this interval of time, a graceful restart will be initiated.
Useful to work around accidental curruptions in accelerator's shared memory.
Time limit on waiting child's reaction on signals from master
Set to 'no' to debug fpm
Name of pool. Used in logs and stats.
Address to accept fastcgi requests on.
Valid syntax is 'ip.ad.re.ss:port' or just 'port' or '/path/to/unix/socket'
Set listen(2) backlog
Set permissions for unix socket, if one used.
In Linux read/write permissions must be set in order to allow connections from web server.
Many BSD-derrived systems allow connections regardless of permissions.
Additional php.ini defines, specific to this pool of workers.
Unix user of processes
Unix group of processes
Process manager settings
Sets style of controling worker process count.
Valid values are 'static' and 'apache-like'
Sets the limit on the number of simultaneous requests that will be served.
Equivalent to Apache MaxClients directive.
Equivalent to PHP_FCGI_CHILDREN environment in original php.fcgi
Used with any pm_style.
Settings group for 'apache-like' pm style
Sets the number of server processes created on startup.
Used only when 'apache-like' pm_style is selected
Sets the desired minimum number of idle server processes.
Used only when 'apache-like' pm_style is selected
Sets the desired maximum number of idle server processes.
Used only when 'apache-like' pm_style is selected
The timeout (in seconds) for serving a single request after which the worker process will be terminated
Should be used when 'max_execution_time' ini option does not stop script execution for some reason
'0s' means 'off'
The timeout (in seconds) for serving of single request after which a php backtrace will be dumped to slow.log file
'0s' means 'off'
The log file for slow requests
Set open file desc rlimit
Set max core size rlimit
Chroot to this directory at the start, absolute path
Chdir to this directory at the start, absolute path
Redirect workers' stdout and stderr into main error log.
If not set, they will be redirected to /dev/null, according to FastCGI specs
How much requests each process should execute before respawn.
Useful to work around memory leaks in 3rd party libraries.
For endless request processing please specify 0
Equivalent to PHP_FCGI_MAX_REQUESTS
Comma separated list of ipv4 addresses of FastCGI clients that allowed to connect.
Equivalent to FCGI_WEB_SERVER_ADDRS environment in original php.fcgi (5.2.2+)
Makes sense only with AF_INET listening socket.
Pass environment variables like LD_LIBRARY_PATH
All $VARIABLEs are taken from current environment
上面两个配置文件仅供参考。Nginx可以同时配置多版本的php同时运行,满足不同项目的需求:可参考http://blog.csdn.net/21aspnet/article/details/47658127
耗费了我两天时间,呼呼