一般很少有用PHP做服务的, 但是如果你的已有业务逻辑都是PHP实现的, 而现在却需要基于已有的业务逻辑提供一套Socket服务, 怎么办?

当然, 解决方法很多, 但最简单的办法, 还是直接使用PHP做Socket服务.

而这样做要解决的问题有很多, 主要要解决的问题有如下几个:

  1. 1. 作为后台服务,需要常驻后台运行, 那么丁点的内存泄露都是不能接受的.
  2. 2. 作为后台服务,畸形数据导致进程异常退出, 也是不可接受的.
  3. 3. 作为后台服务, 要能做到graceful restart.
  4. 4. 作为后台服务, 对资源的使用必须在可接受的范围以内.

最近,我就基于PHP的pcntl扩展实现一个简单的提供Socket服务的框架. 取其名为Mpass(Multi-Processes Socket Server).

主要结构如下:

Mpass

我之前的文章PHP CLI模式下的多进程应用介绍过在PHP做服务的时候如何避免内存泄露, 所以基于此, 再加上PHP5以后的stream_socket_*系列API, 就完成了这一套框架.

至于Graceful restart, 通过pcntl_signal函数, 在接受到restart/shutdown信号时刻, 做关闭清理动作, 保证不会因为重启/关闭而使得正在执行的逻辑出错.

有类似需求的朋友, 可以借鉴.

项目地址&下载地址 : Mpass

Mpass – PHP做Socket服务的解决方案相关推荐

  1. TCP传输:利用socket服务做一个文本转换器

    转载请注明出处,谢谢:http://blog.csdn.net/harryweasley/article/details/45665291 最近看了一个教学视频,学习socket编程,里面有一个例子感 ...

  2. Java:socket服务端,socket服务端支持多连接,socket客户端,socket客户端支持发送和接受

    一.Java之socket服务端 新建一个Java工程 命名 给他先创建一个类 在类里面我们做一个main 这里面也需要,创建套接字,IP号,端口号 但是java中有一个类         Serve ...

  3. C# Socket服务端与客户端通信(包含大文件的断点传输)

    步骤: 一.服务端的建立 1.服务端的项目建立以及页面布局 2.各功能按键的事件代码 1)传输类型说明以及全局变量 2)Socket通信服务端具体步骤:   (1)建立一个Socket   (2)接收 ...

  4. 【★更新★】高性能 Windows Socket 服务端与客户端组件(HP-Socket v2.0.1 源代码及测试用例下载)...

    HP-Socket 以前为某大型通信项目开发了一套通用 Windows Socket TCP 底层通信组件,组件代号为 HP-Socket.现在把 HP-Socket 的所有代码向大众公开,希望能对大 ...

  5. macos big sur安装php扩展_用PHP构建基于swoole扩展的socket服务(附PHP扩展安装步骤)...

    最近公司的一项目中,需要用PHP搭建一个socket服务. 本来PHP是不适合做服务的,因为和第三方合作,需要采用高效而稳定的TCP协议进行数据通信.经过多次尝试,最终选择了开源的PHP扩展:swoo ...

  6. DockerCon 2016 深度解读: Citrix 服务发现解决方案 —— Nitrox

    说起Citrix公司的NetScaler这款硬件负载均衡器大家可能不熟悉,它的竞争对手F5,在运维界可能比较多人了解.硬件负载均衡器通常作为网络入口流量分流的设备,例如像淘宝网的流量特别大,可能只有几 ...

  7. Cluster模式潜在问题及解决方案、Web服务综合解决方案

    会不断更新!冲冲冲!跳转连接 https://blog.csdn.net/qq_35349982/category_10317485.html Cluster模式潜在问题及解决方案.Web服务综合解决 ...

  8. 使用SuperSocket打造逾10万长连接的Socket服务

    使用SuperSocket打造逾10万长连接的Socket服务 原文:使用SuperSocket打造逾10万长连接的Socket服务 SuperSocket 是一个轻量级, 跨平台而且可扩展的 .Ne ...

  9. 《零基础看得懂的C语言入门教程 》——(十三)socket服务端编写

    一.学习目标 了解C语言的socket的概念 了解C语言socket的使用方法 完成C语言socket服务端 目录 C语言真的很难吗?那是你没看这张图,化整为零轻松学习C语言. 第一篇:(一)脱离学习 ...

  10. AI+服务 阿里巴巴如何做智能服务转型?

    AI下围棋.AI写作文.AI看病--在智能时代,通过新技术的赋能,行业已经发展到了一个新的高度.那么在服务领域,尤其是企业服务中,智能技术的加入会带来哪些新的想象? 在阿里巴巴,智能服务已经成为企业发 ...

最新文章

  1. C语言荣获2019年度最佳编程语言
  2. sql server 海量数据速度提升:SQL优化-索引(9) 【转】
  3. 使用JdbcTemplate报 Incorrect column count: expected 1, actual 5错误解决
  4. SQL Server 服务器硬件配置
  5. 让你见识一下什么叫最完整、最系统的前端学习路线
  6. java集合中retainAll方法
  7. redis 能不能监听特定的key失效_Spring boot实现监听Redis key失效事件实现和其它方式...
  8. 《GO并发编程实战》—— 临时对象池
  9. python3高性能网络编程_Python高级网络编程系列之基础篇
  10. 开源转场库HYBControllerTransitions
  11. 快速突破面试算法之树结构篇
  12. 博世BMI160驱动程序 C语言编程,如何使用PSoC 6制作完整的测试系统来与BMI160进行通话...
  13. C++char数据类型
  14. Cloudflare Radar 2021 年回顾
  15. untiy 移除一个组件
  16. AI 换脸术「Deepfakes」进化简史
  17. 2018-2019年世界将会出现一场经济危机,危机过后中国将会崛起!
  18. java微信公众号自动回复文字加图片
  19. 【SAP】德国SAP校园招聘面试经验
  20. Python实现的通讯录

热门文章

  1. Qt 防止程序二次运行 实现应用单例
  2. import/export win7中电源计划
  3. 服务器压缩文件夹,怎样在文件服务器的NTFS分区(卷)中,压缩文件夹D:\lists?...
  4. oracle 导入时出现两个,Oracle的导入及两个错误
  5. python中title函数有什么用_基于Python中capitalize()与title()的区别详解
  6. vscode启动项目报jdk11没有_JDK 11 安装过程(同时已安装了JDK 8)以及Intellij IDEA 配置...
  7. vi/vim编辑器使用方法详解
  8. OpenCasCade中一个V3d_Viewer对应多个示例窗口V3d_View
  9. C++随机数生成器(default_random_engine)
  10. c++MFC 截取字符串