进程,线程  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. 在Windows2008下安装SQL Server 2005无法启动服务的解决办法

    在Windows2012下安装SQL Server 2005无法启动服务的解决办法 1.正常安装任一版本的SQL Server 2005. 2.安装到SqlServer服务的时候提示启动服务失败  此 ...

  2. centos7安装Jenkins

    一.准备工作 机器要求: 256MB内存,建议大于512MB 10GB的硬盘空间(用于存放Jenkins镜像) 需要安装以下软件: Java (JRE或者JDK都可以) 需要可以访问公网 关闭防火墙连 ...

  3. Linux查看版本(centos)

    1.查看内核版本 1.1.uname -a 1.2.cat /proc/version 2.查看发行版本 cat /etc/redhat-release

  4. Python全栈开发记录_第九篇(面向对象(类)的学习)

    有点时间没更新博客了,今天就开始学习类了,今天主要是面向对象(类),我们知道面向对象的三大特性,那就是封装,继承和多态.内容参考该博客https://www.cnblogs.com/wupeiqi/p ...

  5. 同一台PC,配置多个同一存储平台下的Git账号【两个码云账号,配置在同一台PC上】

    问题:配置完 SSH Key, 使用[http地址]拉取代码异常.报一些没有权限的问题. 原因:配置多个gitee账号(码云)后.拉取代码时,应使用~.ssh/config中Host地址,而不是码云给 ...

  6. HTML基础篇

    由于一些原因,要换工作了,毫无准备,心情郁闷了几天.但是还是更新了简历,准备复习面试.面 了3天.面试中问到了一些问题,想好好整理一下.越是大公司越看重基础.这几天遇到的面试题,有15到简答题,有两页 ...

  7. 转载:深入浅出Zookeeper(一) Zookeeper架构及FastLeaderElection机制

    转载至 http://www.jasongj.com/zookeeper/fastleaderelection/: 原创文章,转载请务必将下面这段话置于文章开头处.本文转发自技术世界,原文链接 htt ...

  8. pyqt5-----postgresql数据库使用

    上一章解决了无法加载postgresql数据库的问题 1.打开数据from PyQt5 import QtWidgets,QtSql,QtCoreimport sys app =QtCore.QCor ...

  9. redis的使用与 django的redis的使用

    1. 使用redis数据库分为两种: 第一种是在python语言中直接使用的方式, 第二种就是在django中使用django_redis模块来数用 第一种直接在python语言中使用redis im ...

  10. base64转码,解码方法

    function Base64() { // private property _keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqr ...