>백엔드 개발 >PHP 튜토리얼 >Swoole 고성능 PHP 프레임워크

Swoole 고성능 PHP 프레임워크

不言
不言원래의
2018-04-24 16:35:402629검색

이 기사에서는 특정 참조 가치가 있는 Swoole 고성능 PHP 프레임워크를 주로 소개합니다. 이제 모든 사람과 공유합니다. 필요한 친구들이 참조할 수 있습니다.

저는 전에 강력한 성능을 가진 nodejs를 배운 적이 있습니다.

올해의 목표는 워크맨에 대해 더 알아보고 스울을 사용하는 것입니다. 예전에는 채팅 시스템을 처리하기 위해 workman을 사용했는데, 작업은 창에서 실행되어야 했습니다. 따라서 성능면에서 작업자의 장점이 충분히 활용되지 않습니다.

이번 달에는 프로젝트의 요구에 맞춰 Swoole을 사용하여 WeChat 미니 프로그램 몰의 고객 서비스 채팅 시스템 인터페이스를 개발했습니다.

WeChat에서 제공하는 공식 인터페이스를 통해 고객과 고객 서비스 간의 채팅을 즐겨보세요.

Swoole 고성능 PHP 프레임워크

swoole을 사용하면 웹소켓을 쉽게 처리하고 온라인 채팅을 할 수 있습니다.

지정된 사용자에게 메시지를 보내기 위한 전제 조건

클라이언트가 소켓에 연결되면 시스템은 fd를 할당하게 되는데, fd는 개별 클라이언트를 식별하는 것입니다.
로그인 시 고객 서비스 측에서 고객 서비스 ID를 포함한 사용자 정보를 swoole로 보낼 수 있습니다.

지정된 고객이나 그룹에게 메시지를 보내려면 고객 서비스 ID와 해당 FD를 Redis에 저장하세요. 소켓을 열고 고객 서비스에 보낼 때 redis 고객 서비스의 해당 키만 읽으면 지정된 사용자에게 보낼 수 있습니다.

Asynchronous

현재 상담량이 많지는 않지만 코드 수명을 연장하기 위해 고객 서비스에서 메시지를 보내고 메시지를 받을 때 작업 비동기식이 추가됩니다. 문의량이 많을 경우 Swoole에서 간편하게 처리해 드립니다.

비동기 저장 로그

채팅은 글을 쓰는 것과는 다릅니다. 초당 수만 건의 문의가 있을 수 있으므로 시스템을 원활하게 만들기 위해 swoole은 비동기식 읽기 및 쓰기 기능을 제공하여 불필요한 시간이 소요되는 작업에 대한 로그를 읽고 쓸 수 있도록 도와줍니다.

function log_text($data){
    swoole_async_writefile(__DIR__ . '/log.txt', $data.$data."\n\n", function($filename) {
    }, FILE_APPEND);
}

기본 비동기 템플릿

객체 지향 클래스

<?phpclass WebsocketTest {
    public $server;    public function __construct() {
        $this->server = new swoole_websocket_server("0.0.0.0", 7272);        
        $this->server->on(&#39;open&#39;,[$this,&#39;open&#39;]);        
        $this->server->on(&#39;message&#39;, [$this,&#39;message&#39;]);        
        $this->server->on(&#39;close&#39;, [$this,&#39;close&#39;]);        
        $this->server->on(&#39;request&#39;, [$this,&#39;request&#39;]);        
        $this->server->on(&#39;task&#39;,[$this,&#39;task&#39;]);        
        $this->server->on(&#39;finish&#39;,[$this,&#39;finish&#39;]);        
        $this->server->set([//            &#39;daemonize&#39;=>true,
        &#39;task_worker_num&#39;=>10,
        ]);        $this->server->start();
    }    //@异步接受数据, 发送数据
    function finish($server, $task_id,$data){
        $server->push($data[&#39;fd&#39;],$data[&#39;data&#39;]);
    }    //@异步处理数据
    function task($server, $task_id, $from_id, $data){
        //接受到数据之后处理复杂逻辑处理
        sleep(&#39;5&#39;);        
        $data[&#39;data&#39;] = &#39;服务器发送&#39;.$data[&#39;data&#39;];        
        $server->finish($data);
    }    
    function request($request, $response) {
        foreach ($this->server->connections as $fd) {            
        $this->server->push($fd, $request->get[&#39;message&#39;]);
        }
    }    function close($ser, $fd) {
        echo "client {$fd} closed\n";
    }    function message(swoole_websocket_server $server, $frame) {
        $data = [            
        &#39;fd&#39;=>$frame->fd,            &#39;data&#39;=>$frame->data,
        ];        
        $server->task($data);
    }    function open( $server, $request) {

    }
}new WebsocketTest();

위 내용은 Swoole 고성능 PHP 프레임워크의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.