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

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

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

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

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

#!/bin/sh
echo "start kill socket..."
PID=`netstat -anp|grep |awk '{printf $7}'|cut -d/ -f1`
echo "pid: $PID"
kill - "$PID"
echo "Killed pid 10001" #假定此socket服务的端口为10001
kill -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协议协议
 
2. 打包及解析二进制:使用php自带的pack()和unpack()函数
 
3. 搭建socket服务:使用swoole扩展
 
4. 启动和停止socket服务:shell脚本
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
 
 

【原】用PHP搭建基于swoole扩展的socket服务(附PHP扩展的安装步骤及Linux/shell在线手册)的更多相关文章

  1. SpringBoot 搭建基于 MinIO 的高性能存储服务

    1.什么是MinIO MinIO是根据GNU Affero通用公共许可证v3.0发布的高性能对象存储.它与Amazon S3云存储服务兼容.使用MinIO构建用于机器学习,分析和应用程序数据工作负载的 ...

  2. 搭建基于.NetFrameWork的私有nuget服务端及打包项目发布上传

    一.私有Nuget服务端搭建 1.创建一个.NetFramework web项目 2.在nuget管理中 安装 nuget.server包 3.安装完成后修改web.config里面的 apikey ...

  3. vps搭建个人网盘不二之选—kodexplorer介绍,包含安装步骤

    之前给大家介绍过seafile.h5ai等网盘系统,今天给大家介绍下kodexplorer网盘系统.Kodexplorer,也叫芒果云.可道云.kodcloud,总之名字改了不少.但其本身作为一个网盘 ...

  4. 基于SWOOLE的分布式SOCKET消息服务器架构

    消息服务器使用socket,为避免服务器过载,单台只允许500个socket连接,当一台不够的时候,扩充消息服务器是必然,问题来了,如何让链接在不同消息服务器上的用户可以实现消息发送呢? 要实现消息互 ...

  5. 搭建基于 HDFS 碎片文件存储服务

    安装 JDK HDFS 依赖 Java 环境,这里我们使用 yum 安装 JDK 8,在终端中键入如下命令: yum -y install java-1.8.0-openjdk* 使用如下命令查看下 ...

  6. 在nginx环境下搭建基于ssl证书的websocket服务转发,wss

    1.证书准备 本地调试,可以安装自签名证书,安装方法参考https本地自签名证书添加到信任证书访问 2.修改配置文件 将上面的配置文件拷贝到conf目录,添加或者修改节点如下 # HTTPS serv ...

  7. 搭建基于asp.net的wcf服务,ios客户端调用的实现记录

    一.写wcf 问题: 1.特定的格式 2.数据绑定 3.加密解密 二.发布到iis 问题: 1.访问权限问题,添加everyone权限 访问网站时:http://localhost/WebbUploa ...

  8. 基于Spring Cloud的微服务入门教程

    (本教程的原地址发布在本人的简书上:http://www.jianshu.com/p/947d57d042e7,若各位看官有什么问题或不同看法请在这里或简书留言,谢谢!) 本人也是前段时间才开始接触S ...

  9. 使用php开发,基于swoole扩展开发的工具 swoole-crontab 作业/任务调度

    Swoole-Crontab(基于Swoole扩展) 1.概述 基于swoole的定时器程序,支持秒级处理. 异步多进程处理. 完全兼容crontab语法,且支持秒的配置,可使用数组规定好精确操作时间 ...

随机推荐

  1. STM32之触摸屏

    一.触摸屏控制器简介 1.TSC2046概貌 2.TSC2046引脚描述 3.TSC2046应用电路 4.常见接线方法 YU=Y- YD=Y+ XL=X- XR=X+ 二.TSC2046编程注意事项 ...

  2. datanode无法连接到master

    初次在VM上配置Hadoop,开了三台虚拟机,一个作namenode,jobtracker 另外两台机子作datanode,tasktracker 配置好后,启动集群 通过http://localho ...

  3. nutch 采集到的数据与实际不符

    现象,这个网站我总计能抽取将近500个URL,但实际只抽取了100条 解析:nutch默认从一个页面解析出的链接,只取前 100 个. <property> <name>db. ...

  4. csuoj 1352: New Sorting Algorithm

    因为每个元素都是移动到比它小1位的元素的后面: 这样的话以后的一定就可以把他们两个打包: 所以用这种方法最多扫一遍就可以了: 但是最小的那个数要不要移动呢? 如果最小的数后面的数都是升序的,那么一直扫 ...

  5. 用CURL来实现file_get_contents函数:curl_file_get_contents

    <?php $url='http://www.bamuyu.com/news/zixun/list_7_2.html'; $content=curl_file_get_contents($url ...

  6. UVA 825 Walkiing on the safe side

    根据地图,要求固定两点间最短路径的条数 . 这题的输入数据就是个坑,题目有没有说明数据之间有多个空格,结尾换行符之前也不止一个空格,WA了好几遍,以后这种情况看来都要默认按照多空格的情况处理了. 可以 ...

  7. [jobdu]不用加减乘除做加法

    使用异或和与,模拟机器的加法.http://blog.csdn.net/htyurencaotang/article/details/11125415 #include <iostream> ...

  8. .htaccess文件的详解以及404页面的设置

    打开记事本,写入以下代码: ErrorDocument 404 /404.html保存成.htaccess文件上传到网站的根目录. /404.html是目录名和文件名,可以改成自己的名字.QUOTE: ...

  9. javascript小游戏--生命游戏

    昨天参加Code Retreat的活动,"Code Retreat是一个一天的集中练习的活动,专注于软件开发和设计的基础". 要了解更多信息可前往 CodeRetreat官网 通过 ...

  10. RecyclerView一个奇怪的npe异常

    java.lang.NullPointerException at android.support.v7.widget.RecyclerView.computeVerticalScrollOffset ...