swoole 异步非堵塞 server/端 client/端 代码,已经测试完毕。
服务器环境 centos7.0 swoole4.3 php7.2 pcre4.8 nginx1.8 php-fpm
server.php
<?php class Server { private $serv; public function __construct() { $this->serv = new swoole_server("0.0.0.0", 9501); $this->serv->set(array( 'worker_num' => 8, 'daemonize' => false, 'max_request' => 10000, 'dispatch_mode' => 2, 'debug_mode'=> 1 )); $this->serv->on('Start', array($this, 'onStart')); $this->serv->on('Connect', array($this, 'onConnect')); //$this->serv->on('Message', array($this, 'onMessage')); $this->serv->on('Receive', array($this, 'onReceive')); $this->serv->on('Close', array($this, 'onClose')); $this->serv->start(); } public function onStart( $serv ) { echo "Start\n"; } public function onConnect( $serv, $fd, $from_id ) { $serv->send( $fd, "收到 {$fd}!" ); } // public function onMessage( $serv, $fd, $from_id ) { // $serv->send( $fd, "Hello {$fd}!我已经收到你的信息" ); // } public function onReceive( $serv, $fd, $from_id, $data ) { echo "Get Message From Client {$fd}:{$data}\n"; $serv->send( $fd, "Hello {$fd}!我收到了你的信息!{$data}" ); } public function onClose( $serv, $fd, $from_id ) { echo "Client {$fd} close connection\n"; } } // 启动服务器 $server = new Server(); ?>
client.php 异步 非阻塞
<?php $client = new swoole_client(SWOOLE_TCP | SWOOLE_ASYNC); //异步非阻塞 $client->on("connect", function($cli) { $cli->send("hello world\n"); }); $client->on("receive", function($cli, $data) { echo "received: $data\n"; //sleep(1); fwrite(STDOUT, "请输入消息:"); $msg = trim(fgets(STDIN)); $cli->send( $msg ); }); $client->on("close", function($cli){ echo "closed\n"; }); $client->on("error", function($cli){ exit("error\n"); }); $client->connect('0.0.0.0', 9501, 0.5); ?>
测试 结果
同步,异步,阻塞和非阻塞 ----概念
同步,异步,阻塞和非阻塞,会组合成上面提到过的四种结果:
(一)同步+阻塞
(二)同步+非阻塞
(三)异步+阻塞
(四)异步+非阻塞
举个例子,比如我们去照相馆拍照,拍完照片之后,商家说需要30分钟左右才能洗出来照片,
这个时候如果我们一直在店里面啥都不干,一直等待商家面前等待它洗完照片,这个过程就叫同步阻塞。
当然大部分人很少这么干,更多的是大家拿起手机开始看电视,看一会就会问老板洗完没,老板说没洗完,然后我们接着看,再过一会接着问,直到照片洗完,这个过程就叫同步非阻塞。
因为店里生意太好了,越来越多的人过来拍,店里面快没地方坐了,老板说你把你手机号留下,我一会洗好了就打电话告诉你过来取,然后你去外面找了一个长凳开始躺着睡觉等待老板打电话,啥不都干,这个过程就叫异步阻塞。
当然实际情况是,大家可能会直接先去逛街或者吃饭做其他的活动,这样以来两不耽误,这个过程就叫异步非阻塞
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战