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);



?>
复制代码

测试 结果

 

      

posted @   黑锦鲤  阅读(618)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示