博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【原】用PHP搭建基于swoole扩展的socket服务(附PHP扩展的安装步骤及Linux/shell在线手册)...
阅读量:6161 次
发布时间:2019-06-21

本文共 1581 字,大约阅读时间需要 5 分钟。

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

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

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

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

#停止10086端口的进程kill -50 `lsof -i:10086 | awk 'NR==2{print $2}'`#停止文件名包含fileName的进程#kill -9 `ps -aux | grep fileName | awk -F' ' '{print $2}'`

#!/bin/shecho "start kill socket..."PID=`netstat -anp|grep 10001|awk '{printf $7}'|cut -d/ -f1`echo "pid: $PID"kill -50 "$PID"echo "Killed pid 10001"  #假定此socket服务的端口为10001kill -USR1
 
PS:PHP扩展的安装步骤():
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的区别:
 
2. 打包及解析二进制:使用php自带的pack()和unpack()函数
 
3. 搭建socket服务:使用swoole扩展
swoole官网: ,
swoole入门教程及文档:
 
4. 启动和停止socket服务:shell脚本
Linux&Shell:
shell 在线手册:
linux 在线手册:
 
5. 业务逻辑用到:cookie验证、Redis缓存
 
6. linux下tcp抓包工具tcpdump
tcpdump  -w tcp.pcap -i lo port 10086 -nn -X
-w tcp.pcap,将结果写入到tcp.pcap文件中
-X,16进制转换成 ASCII
 
7. 网络封包分析软件wireshark
 
 

转载于:https://www.cnblogs.com/imxiu/p/4374227.html

你可能感兴趣的文章
windows修改3389端口
查看>>
关于JavaScript词法
查看>>
FreeSwitch中的会议功能(4)
查看>>
MySQL中创建用户分配权限(到指定数据库或者指定数据库表中)
查看>>
AutoReleasePool 和 ARC 以及Garbage Collection
查看>>
重新想象 Windows 8 Store Apps (9) - 控件之 ScrollViewer 基础
查看>>
乐在其中设计模式(C#) - 提供者模式(Provider Pattern)
查看>>
MVP Community Camp 社区大课堂
查看>>
GWT用frame调用JSP
查看>>
大型高性能ASP.NET系统架构设计
查看>>
insert select带来的问题
查看>>
EasyUI 添加tab页(iframe方式)
查看>>
mysqldump主要参数探究
查看>>
好记心不如烂笔头,ssh登录 The authenticity of host 192.168.0.xxx can't be established. 的问题...
查看>>
使用addChildViewController手动控制UIViewController的切换
查看>>
Android Fragment应用实战
查看>>
SQL Server查询死锁并KILL
查看>>
内存或磁盘空间不足,Microsoft Office Excel 无法再次打开或保存任何文档。 [问题点数:20分,结帖人wenyang2004]...
查看>>
委托到Lambda的进化: ()=> {} 这个lambda表达式就是一个无参数的委托及具体方法的组合体。...
查看>>
apache 伪静态 .htaccess
查看>>