PHP+SOCKET 服务端多进程处理多客户端请求 demo

服务端


$socket = socket_create(AF_INET,SOCK_STREAM,SOL_TCP);
socket_bind($socket,0,95012) or die( 'server bind fail:' . socket_strerror(socket_last_error()));
socket_listen($socket,5);$child = 0; //初始化子进程数
while(true){$client = socket_accept($socket);$pid = pcntl_fork();if ($pid == -1) {die('could not fork');} else if ($pid) {socket_close($client);$child++;if($child >= 3){ //假设最大进程数为3pcntl_wait($status); //等待上一个进程结束$child--;}} else {while (true) {$buf = socket_read($client, 1024);echo $buf.PHP_EOL;if ($buf === FALSE || strcmp($buf, '') == 0) {$code = socket_last_error($client);socket_clear_error($client);if ($code == SOCKET_EAGAIN) {// Nothing to read from non-blocking socket, try again later...echo '无法从非阻塞套接字读取,请稍后再试..。';} else {// Connection most likely closed, especially if $code is '0'echo '连接很可能已关闭,特别是当 $code 为“0”时';socket_close($client);exit;//关闭子进程}}else {if (preg_match('/sleep/i', $buf)) {sleep(10);$html = 'HTTP/1.1 200 OK' . PHP_EOL. 'Content-Type: text/html;charset=utf-8' . PHP_EOL . PHP_EOL;socket_write($client, $html);socket_write($client, "this is server,休克了10秒,模拟很繁忙的样子");} else {socket_write($client, "this is server");}}}}
}socket_close($socket);

客户端

$socket = socket_create(AF_INET,SOCK_STREAM,SOL_TCP);socket_connect($socket, '127.0.0.1', 95012);while (true){fwrite(STDOUT, '请输入消息:');$in = fgets(STDIN);//向服务端发送消息socket_write($socket,$in);//读取服务端消息$msg = socket_read($socket,1024);echo $msg.PHP_EOL;
}
socket_close($socket);

本文学习优化来源:https://blog.csdn.net/github_26672553/article/details/54582030

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/643395.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【大数据】YARN调度器及调度策略

YARN调度器 YARN负责作业资源调度,在集群中找到满足业务的资源,帮助作业启动任务,管理作业的生命周期。 ​ YARN技术架构 ​ 目前,Hadoop作业调度器主要有三种:先进先出调度器(First In First Out&…

electron-updater使用整理

参考文章: 手撸 Electron 自动更新,再繁琐也要搞懂它 - 掘金 (juejin.cn)Electron 自动更新,绕过 latest.yml 使用自定义接口 - 掘金 (juejin.cn)electron-updater实现热更新完整流程 - 掘金 (juejin.cn) 一、 配置 1. 安装electron-updat…

【正点原子STM32】搭建开发环境(安装MDK和器件支持包、DAP仿真器和ST LINK仿真器、CH340串口驱动)

一、常用开发工具简介 MDKDAP 二、安装MDK 1、MDK简介2、如何获取MDK3、安装MDK和器件支持包 三、安装仿真器驱动 DAP仿真器免驱ST LINK仿真器驱动安装方法 ST LINK驱动及教程 四、安装CH340 USB虚拟串口驱动 1、安装CH340 USB虚拟串口驱动2、为什么要安装CH340 USB虚拟…

Google ASPIRE框架:赋予大型语言模型(LLMs)自我评估的新动力

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

大数据学习之Flink、比较不同框架的容错机制

第一章、Flink的容错机制 第二章、Flink核心组件和工作原理 第三章、Flink的恢复策略 第四章、Flink容错机制的注意事项 第五章、Flink的容错机制与其他框架的容错机制相比较 目录 第五章、Flink的容错机制与其他框架的容错机制相比较 Ⅰ、Flink的容错机制与其他框架的容…

springboot 整合 ElasticSearch 方法 (一)

下载 ES 相当于安装 MySQL, 可以在官网上下载 (链接在后面). 要注意安装的 ES 的版本要和项目中用的 Springboot 的版本对应. 比如我用的 Springboot 版本是 2.6, 所以ES要下载7.15 版本的. 官网链接: https://www.elastic.co/cn/downloads/elasticsearch 点右边这个查看更多…

腾讯云4核8G12M服务器我的世界mc够多少人?

mc我的世界服务器4核8g够多少人?80人,4核8G服务器最多支持80人同时在线。关于我的世界服务器的CPU和内存有用户测试过,阿腾云atengyun.com认为最多可以支持80人同时在线。如果运行的云服务器配置较低,启动游戏后可以在左下角看到配…

展厅设计更好的方法

一、与公司形象契合 在展厅规划时必定要留意公司的LOGO、主色调,以及企业文明。在展现时使用丰满的展厅规划传达出企业的理念。而在功用设置上,应当考虑内涵功用,从展厅作业人员的视点动身,为展厅作业人员提供杰出的环境&#xff…

【Java】---反射:Class、Filed、Constructor、Method

【Java】—反射 文章目录 【Java】---反射一、反射1.1 概念1.2 操作步骤 二、Class类2.1 概念2.2 方法2.2.1 getName()2.2.2 getSimpleName()2.2.3 getPackage()2.2.4 getSuperclass()2.2.5 getInterfaces() 三、Field类3.1 概念3.2 方法3.2.1 setAccessible(Boolean b)3.2.2 s…

关于图像分割项目的可视化脚本

1. 前言 之前实现了目标检测和图像分类任务的可视化脚本,本章将最后一个分割任务的可视化脚本实现 效果展示如下: 代码会在当前目录保存展示好的图片,从左到右依次为,原图、mask图、mask覆盖在原图的掩膜图 关于目标检测的可视化…

HTTP状态信息

1xx: 信息 消息:描述:100 Continue服务器仅接收到部分请求,但是一旦服务器并没有拒绝该请求,客户端应该继续发送其余的请求。101 Switching Protocols服务器转换协议:服务器将遵从客户的请求转换到另外一种协议。 2xx: 成功 消息:描述:200…

【二】从零到1设计一个丧葬行业小程序

1、准备工作 1-1、服务器准备 腾讯云轻量级服务器 4核2G 地址: http://1.14.34.13/ 购买域名 www.pengyangyan.work (备案中) 图片服务器:七牛云 1-2、环境配置 服务器 docker容器部署 https://blog.csdn.net/pengyangyan/article/d…

app如何实现悬浮框滚动到那个模块定位到那。

如图&#xff1a; 使用uniapp内置方法 onPageScroll 获取到滚动了多少。 其实拿到屏幕滚动多少就很简单了&#xff0c;下面是思路。 tap栏切换效果代码就不贴了。直接贴如何到那个模块定位到哪&#xff0c;和点击定位到当前模块。 <view v-if"show" class&qu…

Java中异常的优雅处理方式

工作当中经常遇到程序跑异常的问题&#xff0c;而优雅处理异常则是高质量代码的关键。本文将深入讨论Java中异常的优雅处理方式&#xff0c;通过代码示例和实际使用场景进行详细说明&#xff0c;帮助大家更好地理解和应用异常处理机制。 1. 异常处理基础 在Java中&#xff0c…

HarmonyOS鸿蒙应用开发( 四、重磅组件List列表组件使用详解)

List列表组件&#xff0c;是一个非常常用的组件。可以说在一个应用中&#xff0c;它的身影无处不在。它包含一系列相同宽度的列表项&#xff0c;适合连续、多行呈现同类数据&#xff0c;如商品列表、图片列表和和文本列表等。ArkUI 框架采用 List 容器组件创建列表&#xff08;…

某国有企业后备人才培养机制建设

某电力勘测设计院始建于1958年&#xff0c;是中国电力建设集团有限公司旗下的大型电力工程咨询公司。伴随着中国电力事业的发展&#xff0c;已发展为具备甲级电力工程规划、咨询、勘测、设计、总承包、环境及安全管理评价、地质灾害勘察、评估与治理、光电建筑一体化及发电专项…

大数据学习之Flink算子、了解DataStream API(基础篇一)

DataStream API &#xff08;基础篇&#xff09; 注&#xff1a; 本文只涉及DataStream 原因&#xff1a;随着大数据和流式计算需求的增长&#xff0c;处理实时数据流变得越来越重要。因此&#xff0c;DataStream由于其处理实时数据流的特性和能力&#xff0c;逐渐替代了DataSe…

Windows下安装达梦8开发版数据库

达梦数据库属于国产主流数据库之一&#xff0c;本文记录WIndows下安装最新的达梦8数据库的过程。   达梦官网&#xff08;参考文献1&#xff09;下载开发版&#xff08;X86平台&#xff09;版安装包&#xff0c;如下图所示&#xff1a; 解压安装包后&#xff0c;其中包含ISO文…

Unity中UGUI在Mask剪裁粒子特效的实现

在Unity使用Mask是剪裁不了粒子特效的&#xff0c;之前有想过RenderTexture来实现&#xff0c;不过使用RenderTexture不适合用于很多个特效&#xff0c;因为RenderTexture依赖Camera的照射&#xff0c;如果在背包中每种道具都有不同的特效&#xff0c;那使用RenderTexture则需要…