swoole完成聊天室

1.swoole使用swoole_event_add()注册事件完成聊天室

客户端代码

<?php
    $socket = stream_socket_client("tcp://127.0.0.1:9501",$errno,$errstr,30);
    function onRead(){
        global $socket;
        $buffer = stream_socket_recvfrom($socket,1024);
        if(!$buffer){
            swoole_event_del($socket);
        }
        echo "REV{$buffer}".PHP_EOL;
        fwrite(STDOUT,"Enter MSG");
    }

    function onWrite(){
        global $socket;
        echo "ON write".PHP_EOL;

    }
    function onInput(){
        global $socket;
        $msg = trim(fgets(STDIN));
        if($msg == "exit"){
            swoole_event_exit();
            exit();
        }
        swoole_event_write($socket,$msg);
        fwrite(STDOUT, "Enter Msg".PHP_EOL);
    }

    swoole_event_add($socket,'onRead','onWrite');
    swoole_event_add(STDIN,"onInput");

?>

2.服务端代码

<?php
class Server{
    private $serv;
    private $test;

    public function __construct(){
        $this->serv = new swoole_server("0.0.0.0",'9501');
        $this->serv->set([
            'worker_num'=>2,
        ]);
        $this->serv->on('Start',[$this,'onStart']);
        $this->serv->on('Connect',[$this,'onConnect']);
        $this->serv->on("Close",[$this,'onClose']);
        $this->serv->on('Receive',[$this,'onReceive']);
        $this->serv->start();
    }

    public function onStart($serv){
        echo "Start".PHP_EOL;
    }

    public function onConnect($serv,$fd,$from_id){
        echo "Client connect".PHP_EOL;
    }

    public function onClose($serv,$fd,$from_id){
        echo "Client close connections".PHP_EOL;
    }

    public function onReceive($serv,$fd,$from_id,$data){
        echo "GET Message From Client".PHP_EOL;
        echo $data.PHP_EOL;
        foreach($serv->connections as $client){
                if($fd != $client){
                    $serv->send($client,$data);
                }
        }
    }
}

$Server = new Server();

猜你喜欢

转载自www.cnblogs.com/zh718594493/p/12897666.html