分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 软件开发

php socket多进程简单服务器(一)

发布时间:2023-09-06 02:34责任编辑:白小东关键词:暂无标签

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

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

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

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

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

进程并发代码 服务端代码

 1 <?php 2 $socket = socket_create(AF_INET,SOCK_STREAM,SOL_TCP) or die("error:".socket_strerror(socket_last_error())); 3 socket_bind($socket,"192.168.33.1","8000") or die("error:".socket_strerror(socket_last_error())); 4 socket_set_option($socket, SOL_SOCKET , SO_REUSEADDR , 1);#可以重复使用端口号 5 socket_listen($socket,5); 6 while(true){ 7 ????print("******等待新客户端的到来*******\r\n"); 8 ????$clien = socket_accept($socket) or die("error:".socket_strerror(socket_last_error())); 9 ????$pid = pcntl_fork();10 ????posix_setsid();11 ????if ($pid == -1) {12 ????????die(‘fork failed‘);13 ????} else if ($pid == 0) {14 ????????hanld_seesion($clien);15 ????} else {16 ????????#pcntl_wait($status);17 ????}18 }19 20 function hanld_seesion($clien){21 ????socket_getpeername($clien,$ip,$port);22 ????$id = posix_getpid();23 ????print("进程ID:$id == 客户端:".$ip.":".$port."已连接\r\n");24 ????while(true){25 ????????$data = socket_read($clien,1024);26 ????????if(mb_strlen($data) == 0)27 ????????{28 ????????????print("进程ID:$id == 客户端:".$ip.":".$port."断开连接\r\n");29 ????????????socket_close($clien);30 ????????????exit();31 ????????}32 ????????print($ip.":".$port.">>:".$data."\r\n");33 ????}34 }

客户端代码

1 <?php2 $socket = socket_create(AF_INET,SOCK_STREAM,SOL_TCP) or die("error:".socket_strerror(socket_last_error()));3 $msg = "Ping!";4 $len = strlen($msg);5 $server = socket_connect($socket,‘192.168.33.1‘, 8000);6 socket_write($socket, $msg);7 sleep(30);8 socket_close($socket);

    

php socket多进程简单服务器(一)

原文地址:https://www.cnblogs.com/zz-952/p/10481616.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved