swoole 简单聊天室

服务端

<?php
/**
 * Created by PhpStorm.
 * User: LeoKim
 * Date: 2017/5/12
 * Time: 23:05
 */

class Server{
    private $serv;
    private $test;

    public function __construct()
    {
        $this->serv = new swoole_server("0.0.0.0", 9502);
        $this->serv->set(
            array(
                'worker_num' => 1,
            )
        );

        $this->serv->on('Start', array($this, 'onStart'));
        $this->serv->on('Connect', array($this, 'onConnect'));
        $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 ) {
        echo "Client {$fd} connect\n";
    }

    public function onClose( $serv, $fd, $from_id ) {
        echo "Client {$fd} close connection\n";
    }

    public function onReceive( swoole_server $serv, $fd, $from_id, $data){
        echo "Get Message From Client {$fd}:{$data}\n";
        foreach($serv->connections as $client){
            if($fd != $client)
            $serv->send($client, $data);
        }
    }
}

$server = new Server();

客户端

<?php
/**
 * Created by PhpStorm.
 * User: LeoKim
 * Date: 2017/5/12
 * Time: 23:13
 */

$socket = stream_socket_client("tcp://127.0.0.1:9502", $errno, $errstr, 30);

function OnRead()
{
    global $socket;
    $buffer = stream_socket_recvfrom($socket, 1024);
    if(!$buffer)
    {
        echo "Server clised\n";
    }
    echo "\nRECV: {$buffer}\n";
    fwrite(STDOUT, "Enter Msg:");
}

function onWrite()
{
    global $socket;
    echo "on Write\n";
}

function onInput()
{
    global $socket;
    $msg = trim(fgets(STDIN));

    if($msg == 'exit'){
        swoole_event_exit();
        exit();
    }

    swoole_event_write($socket, $msg);
    fwrite(STDOUT, "Enter Msg:");
}

swoole_event_add($socket, 'onRead', 'onWrite');

swoole_event_add(STDIN, 'onInput');

fwrite(STDOUT, "Enter Msg:");

image.png

image.png

image.png