swoole简单的聊天室demo

2019-09-18 742 阅读 0评论


HTML代码

<!DOCTYPE html>

<html>

<head>

      <title>swoole chat room</title>

      <meta charset="UTF-8">

      <script type="text/javascript">

          if(window.WebSocket){

              var webSocket = new WebSocket("ws://101.200.223.48:9502");

              webSocket.onopen = function (event) {

                  //webSocket.send("Hello,WebSocket!"); 

              };

              webSocket.onmessage = function (event) {

                var content = document.getElementById('content');

                content.innerHTML = content.innerHTML.concat('<p style="margin-left:20px;height:20px;line-height:20px;">'+event.data+'</p>');

              }

              

              var sendMessage = function(){

                  var data = document.getElementById('message').value;

                  webSocket.send(data);

              }

          }else{

              console.log("您的浏览器不支持WebSocket");

          }

      </script>

</head>

<body>

    <div style="width:600px;margin:0 auto;border:1px solid #ccc;">

        <div id="content" style="overflow-y:auto;height:300px;"></div>

        <hr/>

        <div style="height:40px">

            <input type="text" id="message" style="margin-left:10px;height:25px;width:450px;">

            <button onclick="sendMessage()" style="height:28px;width:75px;">发送</button>

        </div>

    </div>

</body>

</html>

----------------------------------------------------------------------------------

php 代码


<?php

$ws = new swoole_websocket_server("0.0.0.0", 9502);


// 设置配置

$ws->set(

    array(

        'daemonize' => false,      // 是否是守护进程

        'max_request' => 10000,    // 最大连接数量

        'dispatch_mode' => 2,

        'debug_mode'=> 1,

        // 心跳检测的设置,自动踢掉掉线的fd

        'heartbeat_check_interval' => 5,

        'heartbeat_idle_time' => 600,

    )

);


//监听WebSocket连接打开事件

$ws->on('open', function ($ws, $request) {

    $ws->push($request->fd, "hello, welcome to chatroom\n");

});


//监听WebSocket消息事件,其他:swoole提供了bind方法,支持uid和fd绑定

$ws->on('message', function ($ws, $frame) {

    $msg = 'from'.$frame->fd.":{$frame->data}\n";


    // 分批次发送

    $start_fd = 0;

    while(true)

    {

        // connection_list函数获取现在连接中的fd

        $conn_list = $ws->connection_list($start_fd, 100);   // 获取从fd之后一百个进行发送

        var_dump($conn_list);

        echo count($conn_list);


        if($conn_list === false || count($conn_list) === 0)

        {

            echo "finish\n";

            return;

        }


        $start_fd = end($conn_list);

        

        foreach($conn_list as $fd)

        {

            $ws->push($fd, $msg);

        }

    }

});


//监听WebSocket连接关闭事件

$ws->on('close', function ($ws, $fd) {

    echo "client-{$fd} is closed\n";

    $ws->close($fd);   // 销毁fd链接信息

});


$ws->start();


然后服务器端直接php swoole.php启动swoole就行,多个浏览器访问swoole.html页面,可以模拟聊天室,查看推送。


blob.png

发表评论

快捷回复: 表情:
aoman baiyan bishi bizui cahan ciya dabing daku deyi doge fadai fanu fendou ganga guzhang haixiu hanxiao zuohengheng zhuakuang zhouma zhemo zhayanjian zaijian yun youhengheng yiwen yinxian xu xieyanxiao xiaoku xiaojiujie xia wunai wozuimei weixiao weiqu tuosai tu touxiao tiaopi shui se saorao qiudale qinqin qiaoda piezui penxue nanguo liulei liuhan lenghan leiben kun kuaikule ku koubi kelian keai jingya jingxi jingkong jie huaixiao haqian aini OK qiang quantou shengli woshou gouyin baoquan aixin bangbangtang xiaoyanger xigua hexie pijiu lanqiu juhua hecai haobang caidao baojin chi dan kulou shuai shouqiang yangtuo youling
提交
评论列表 (有 0 条评论, 742人围观)

最近发表

热门文章

最新留言

热门推荐

标签列表