进程,线程  IO复用,协程都是处理完成并发的方式

socket分为  三步 服务器监听,客户端请求,连接确认,

每次连接都由当前进程来处理,可以通过IO复用来解决这个问题,

这次通过进程来完成并发请求,但是这种方式开销大,消耗较多,频繁的创建和销毁也是耗时

线程并发  IO复用 等下次在贴代码

进程并发代码 服务端代码

 <?php
$socket = socket_create(AF_INET,SOCK_STREAM,SOL_TCP) or die("error:".socket_strerror(socket_last_error()));
socket_bind($socket,"192.168.33.1","8000") or die("error:".socket_strerror(socket_last_error()));
socket_set_option($socket, SOL_SOCKET , SO_REUSEADDR , 1);#可以重复使用端口号
socket_listen($socket,5);
while(true){
print("******等待新客户端的到来*******\r\n");
$clien = socket_accept($socket) or die("error:".socket_strerror(socket_last_error()));
$pid = pcntl_fork();
#posix_setsid();
if ($pid == -1) {
die('fork failed');
} else if ($pid == 0) {
hanld_seesion($clien);
} else {
#pcntl_wait($status);
}
} function hanld_seesion($clien){
socket_getpeername($clien,$ip,$port);
$id = posix_getpid();
print("进程ID:$id == 客户端:".$ip.":".$port."已连接\r\n");
while(true){
$data = socket_read($clien,1024);
if(mb_strlen($data) == 0)
{
print("进程ID:$id == 客户端:".$ip.":".$port."断开连接\r\n");
socket_close($clien);
exit();
}
print($ip.":".$port.">>:".$data."\r\n");
}
}

客户端代码

 <?php
$socket = socket_create(AF_INET,SOCK_STREAM,SOL_TCP) or die("error:".socket_strerror(socket_last_error()));
$msg = "Ping!";
$len = strlen($msg);
$server = socket_connect($socket,'192.168.33.1', 8000);
socket_write($socket, $msg);
sleep(30);
socket_close($socket);

   

php socket多进程简单服务器(一)的更多相关文章

  1. Socket创建简单服务器和客户端程序

    使用Socket编程创建简单服务器和客户端 要知道的 Socket-AddressFamily, SocketType, ProtocolType https://blog.csdn.net/weix ...

  2. Linux多进程CS服务器简单测试

    Linux多进程CS服务器简单实现 server端 多进程实现多用户连接,即每个用户一个连接,这里仍然用server将收到的字符串转大写后返回给客户端. 代码实现 #include <stdio ...

  3. C#中使用Socket实现简单Web服务器

    上一篇博客中介绍了怎样使用socket访问web服务器.关键有两个: 熟悉Socket编程: 熟悉HTTP协议. 上一篇主要是通过socket来模拟浏览器向(任何)Web服务器发送(HTTP)请求,重 ...

  4. 运用socket实现简单的服务器客户端交互

    Socket解释: 网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket. Socket的英文原义是“孔”或“插座”.作为BSD UNIX的进程通信机制,取后一种意 ...

  5. 用Socket来简单实现IIS服务器

    刚刚接触ASP.NET编程,为了更好的屡清楚服务器的处理过程,就用Socket模拟服务器来处理请求.用Socket来模拟服务器的时候,同样是自己来封装一些对应的类文件.包括 HttpRequest.H ...

  6. socket.io简单入门(一.实现简单的图表推送)

    引子:随着nodejs蓬勃发展,虽然主要业务系统因为架构健壮性不会选择nodejs座位应用服务器.但是大量的内部系统却可以使用nodejs试水,大量的前端开发人员转入全堆开发也是一个因素. 研究本例主 ...

  7. Socket的简单使用

    一.Socket: Socket又称”套接字" 网络上的两个程序通过一个双向的通信链接实现数据的交换,这个连接的一端成为一个socket 应用程序通常通过”套接字”向网络发出请求或者应答网络 ...

  8. socket.io简单说明及在线抽奖demo

    socket.io简单说明及在线抽奖demo socket.io 简介 Socket.IO可以实现实时双向的基于事件的通信. 它适用于各种平台,浏览器或设备,也同样注重可靠性和速度. socket.i ...

  9. java Socket实现简单在线聊天(二)

    接<java Socket实现简单在线聊天(一)>,在单客户端连接的基础上,这里第二步需要实现多客户端的连接,也就需要使用到线程.每当有一个新的客户端连接上来,服务端便需要新启动一个线程进 ...

随机推荐

  1. [STM32F103]定时器中断

    l 使能定时器时钟. RCC_APB1PeriphClockCmd(); l 初始化定时器,配置ARR,PSC. TIM_TimeBaseInit(); l 开启定时器中断,配置NVIC. void ...

  2. 服务调用框架DataStrom

    根据以前的命名服务,从新构建了下服务框架: 结构模式:c-center-s; 1.服务端: 服务端启动,讲自己的IP,端口注册到注册中心节点(master),然后注册自己的处理类(需要继承对应接口); ...

  3. http(数据格式)、postman(数组、id、断言) 小知识必看啊

  4. Postman A请求的返回值作为B请求的入参( 之‘’token‘’ ,用代码设置全局变量)

    问题: 登陆接口获取token,其他接口访问时需携带token 方案: 在登陆接口访问后设置Postman的全局变量(Globals),例如设置环境变量名:token2,值(实时的不用自己手动设置的) ...

  5. springboot学习五:IDEA外部tomcat发布

    pom.xml配置 屏蔽自带tomcat <dependency> <groupId>org.springframework.boot</groupId> < ...

  6. C# 使用缓存数据模拟抢购

      在所有的电商网站中,不乏大量的抢购,比如双十一,双十二等等,作为一名开发人员考虑最多的就是多并发以及高并发 废话少说,开始写代码.我用了C#的MemoryCache代替试下流行的各种缓存 商品测试 ...

  7. 稀疏矩阵 part 5

    ▶ 目前为止能跑的所有代码及其结果(2019年2月24日),之后添加:DIA 乘法 GPU 版:其他维度的乘法(矩阵乘矩阵):其他稀疏矩阵格式之间的相互转化 #include <stdio.h& ...

  8. DatakeyNames和datakey

    DataKey 类用于表示数据绑定控件中某个记录的主键.记录的主键可以由数据源中的一个或多个字段组成.尽管 DataKey 类不是集合,但它可以存储多个键字段值.当调用 DataKey 类的某个构造函 ...

  9. resin4.0服务器远程调试说明

    1.开发环境介绍: 目前dev用resin 作为服务容器.服务调用之间过于复杂,要进行本地代码调试过于复杂,甚至无法进行.但是可以通过jvm的远程代码调试来达到本地代码调试的目的,步骤如下. 2.re ...

  10. element-ui Form表单校验

    使用element-ui自带的表单校验,注意几个点: 1.el-form通过rules属性,绑定校验规则 2.el-form-item的prop属性,设置为需要校验的字段名 3.提交后二次校验 sav ...