• swoole单socket多协程读写实现思路


    swoole单socket多读多写实现思路

    方式一 利用通道的阻塞效果达成同一时刻只有一个协程能够访问到socket效果

    # 伪代码
    use Swoole\Coroutine;
    use Swoole\Coroutine\Channel;
    use function Swoole\Coroutine\run;
    
    run(function () {
        $mutexChan = new Channel();
        Coroutine::create(function () use ($mutexChan) {
            $mutexChan->push(1);
            // $sock->recvAll();
            $mutexChan->pop();
        });
        Coroutine::create(function () use ($mutexChan) {
            $mutexChan->push(1);
            // $sock->recvAll();
            $mutexChan->pop();
        });
    });
    

    方式二 csp模型 参考开原框架zinx实现思路 真正的读写socket的协程各只有一个,即只有两个协程负责通信,其他的协程通过管道和读写协程通信,同样实现了同一时刻只有一个协程能够对socket进行读写

    # 伪代码
    run(function () {
        Coroutine::create(function () {
            while (1) {
                $payload = $sock->recvAll();
                if ($cond1) {
                    $chan1->push($payload)
                } else {
                    $chan1->push($payload)
                }
            }
        });
        Coroutine::create(function () {
            while (1) {
                $a = $chan1->pop();
                // TODO
            }
        });
        Coroutine::create(function () {
            while (1) {
                $a = $chan2->pop();
                // TODO
            }
        });
    });
    
  • 相关阅读:
    HTTP协议抓包分析
    cmd 中使用 tracert
    Ubuntu 搭建zabbix
    kerberos+ldap
    运行程序显示丢失“MSVCR100D.dll”
    熊猫烧香病毒样本分析
    Masm32sdk安装指南
    16位汇编实现三大基本排序
    逆向工程初步160个crackme-------3
    一个入门级CTF的Reverse
  • 原文地址:https://www.cnblogs.com/alwayslinger/p/15999221.html
Copyright © 2020-2023  润新知