Rumah  >  Artikel  >  php教程  >  【原】用PHP搭建基于swoole扩展的socket服务(附PHP扩展的安装步

【原】用PHP搭建基于swoole扩展的socket服务(附PHP扩展的安装步

WBOY
WBOYasal
2016-06-06 19:47:461883semak imbas

最近公司的一项目中,需要用PHP搭建一个socket服务。 本来PHP是不适合做服务的,因为和第三方合作,需要采用高效而稳定的TCP协议进行数据通信。经过多次尝试,最终选择了开源的PHP扩展:swoole,是用C写的多线程异步Server。 其中二进制数据通信使用php自带

最近公司的一项目中,需要用PHP搭建一个socket服务。

本来PHP是不适合做服务的,因为和第三方合作,需要采用高效而稳定的TCP协议进行数据通信。经过多次尝试,最终选择了开源的PHP扩展:swoole,是用C写的多线程异步Server。

其中二进制数据通信使用php自带的pack()和unpack()函数。需要注意的是,使用pack()打包字母时,需要传入其相应的ASCII码值。

附一段关闭该socket服务的shell脚本(当代码有更新,socket服务需要重启时会用到):

#!/bin/<span>sh</span>
<span>echo</span> <span>"</span><span>start kill socket...</span><span>"</span><span>
PID</span>=`netstat -anp|<span>grep</span> <span>10001</span>|<span>awk</span> <span>'</span><span>{printf $7}</span><span>'</span>|<span>cut</span> -d/ -<span>f1`
</span><span>echo</span> <span>"</span><span>pid: $PID</span><span>"</span>
<span>kill</span> -<span>50</span> <span>"</span><span>$PID</span><span>"</span>
<span>echo</span> <span>"</span><span>Killed pid 10001</span><span>"</span><span>  #假定此socket服务的端口为10001
</span><span>kill</span> -USR1 

 

PS:PHP扩展的安装步骤(http://coolerfeng.blog.51cto.com/133059/98460/):
1 首先进入要安装的扩展的源码目录 
cd /tmp/phpext/swoole
2 在swoole文件夹下产生configure文件 

#/usr/local/php5/bin/phpize
Configuring for:
PHP Api Version:         20041225
Zend Module Api No:      20060613
Zend Extension Api No:   220060519

出现这样的提示说明可以扩展。

3 配置编译和安装

#./configure --with-php-config=/usr/local/php5/bin/php-config 
#make

#make install

4 在/opt/php/lib/php/extensions下产生一个swoole.so文件 

5 编辑php.ini(如果php安装在/usr/local/php5 则php.ini在/usr/local/php5/lib/php.ini中添加
extension_dir = "/usr/local/php5/lib/php/extensions/no-debug-non-zts-20060613/"
extension = "swoole.so"

6 重启apache,然后通过php -m或phpinfo()来查看是否成功加载了swoole扩展。

 

【相关技术总结】

1. 采用TCP/IP协议协议

TCP/IP、Http、Socket的区别:http://jingyan.baidu.com/article/08b6a591e07ecc14a80922f1.html

 

2. 打包及解析二进制:使用php自带的pack()和unpack()函数

http://blog.csdn.net/zhuoxiong/article/details/7362179

http://www.cnblogs.com/wanzibox/articles/1283110.html

http://www.neatstudio.com/show-2327-1.shtml

 

3. 搭建socket服务:使用swoole扩展

swoole官网:http://www.swoole.com/,http://wiki.swoole.com/wiki/index/prid-1
swoole入门教程及文档:https://github.com/LinkedDestiny/swoole-doc

 

4. 启动和停止socket服务:shell脚本

Linux&Shell:http://blog.csdn.net/wklken/article/category/1138797

shell 在线手册:

http://shouce.jb51.net/shell/index.html

linux 在线手册:

http://www.hi-docs.com/linux.html

http://man.linuxde.net/

 

5. 业务逻辑用到:cookie验证、Redis缓存

http://www.cnblogs.com/imxiu/category/545814.html

 


 

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn