swoole多人聊天室

<?php
$serv = new swoole_websocket_server("127.0.0.1", 3999);

//服务的基本设置
$serv->set(array(
    'worker_num' => 2,
    'reactor_num' => 8,
    'task_worker_num' => 1,
    'dispatch_mode' => 2,
    'debug_mode' => 1,
    'daemonize' => true,
    'log_file' => __DIR__ . '/log/webs_swoole.log',
    'heartbeat_check_interval' => 60,
    'heartbeat_idle_time' => 600,
));

$serv->on('connect', function ($serv, $fd) {
// echo "client:$fd Connect.".PHP_EOL;
});

//测试receive

$serv->on("receive", function (swoole_server $serv, $fd, $from_id, $data) {
// echo "receive#{$from_id}: receive $data ".PHP_EOL;
});

$serv->on('open', function ($server, $req) {
// echo "server#{$server->worker_pid}: handshake success with fd#{$req->fd}".PHP_EOL;;
// echo PHP_EOL;
});

$serv->on('message', function ($server, $frame) {
// echo "message: ".$frame->data.PHP_EOL;
    $msg = json_decode($frame->data, true);
    switch ($msg['type']) {
        case 'login':
            $server->push($frame->fd, "欢迎欢迎~");
            break;
        default:
            break;
    }

    $msg['fd'] = $frame->fd;

    $server->task($msg);

});

$serv->on("workerstart", function ($server, $workerid) {
// echo "workerstart: ".$workerid.PHP_EOL;
// echo PHP_EOL;
});

$serv->on("task", "on_task");
$serv->on("finish", function ($serv, $task_id, $data) {
    return;
});

$serv->on('close', function ($server, $fd, $from_id) {
// echo "connection close: ".$fd.PHP_EOL;
// echo PHP_EOL;
});

$serv->start();

function on_task($serv, $task_id, $from_id, $data)
{
    switch ($data['type']) {
        case 'login':
            $send_msg = "说:我来了~";
            break;
        default:
            $send_msg = "说:{$data['msg']['speak']}";
            break;
    }

    foreach ($serv->connections as $conn) {
        if ($conn != $data['fd']) {
            if (strpos($data['msg']['name'], "游客") === 0) {
                $name = $data['msg']['name'] . "_" . $data['fd'];
            } else {
                $name = $data['msg']['name'];
            }
        } else {
            $name = "我";
        }
        $serv->push($conn, $name . $send_msg);
    }
    return;
}

function on_finish($serv, $task_id, $data)
{
    return true;
}
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>WebSocket测试</title>
</head>
<body>
    <h2>WebSocket Test</h2>
    昵称:<input type="text" id="name" size="5" value="游客"/> <input type="text" id="content">
    <button onclick="speak_to_all()">发送</button>
    <br/><br/>
    <textarea id="message" style="overflow-x:hidden" rows="10" cols="50"></textarea>
    <p id="output"></p>
</body>

<script language="javascript" type="text/javascript">

    var wsUri ="ws://127.0.0.1:3999/";

    var output;

    function init() {
        output = document.getElementById("output");
        testWebSocket();
    }

    function testWebSocket() {
        websocket = new WebSocket(wsUri);
        websocket.onopen = function(evt) {
            onOpen(evt)
        };

        websocket.onclose = function(evt) {
            onClose(evt)
        };

        websocket.onmessage = function(evt) {
            onMessage(evt)
        };

        websocket.onerror = function(evt) {
            onError(evt)
        };

    }

    function get_speak_msg(){
        var name=document.getElementById("name").value;
        var speak=document.getElementById("content").value;
        var json_msg='{"name":"'+name+'","speak":\"'+speak+'"}';
        return json_msg;
    }

    function pack_msg(type,msg){
        return '{"type":"'+type+'","msg":'+msg+'}';
    }

    function onOpen(evt) {
        append_speak("已经联通服务器.........");
        speak_msg=get_speak_msg();
        send_msg=pack_msg("login",speak_msg);
        doSend(send_msg);
    }

    function onClose(evt) {
        append_speak("俺老孙去也!");
    }

    function onMessage(evt) {
        append_speak(evt.data);
    }

    function onError(evt) {
        alert(evt.data);
    }

    function doSend(message) {
        websocket.send(message);
    }

    function append_speak(new_msg){
        document.getElementById("message").value=document.getElementById("message").value+new_msg+"\n";
        document.getElementById('message').scrollTop = document.getElementById('message').scrollHeight;
    }

    function speak_to_all(){
        send_msg=pack_msg("speak",get_speak_msg());
        if(document.getElementById("content").value==""){
            return;
        }
        doSend(send_msg);
        document.getElementById("content").value="";
    }

    init();
</script>
</html>

 

posted @ 2020-04-24 22:27  大雾哥  阅读(409)  评论(0编辑  收藏  举报