消息推送 HTML5 + swoole websocket server

来源:互联网 发布:算法好难 编辑:程序博客网 时间:2024/06/14 00:35
<?phpnamespace app\index\controller;use swoole_websocket_server;/* * [root@contoso think]# cd /home/myth/www/think && php public/index.php index/Server/run * [root@contoso think]# ps -eaf | grep 'index/Server/run' | grep -v 'grep' | awk '{print $2}' | xargs kill -9 *  * [root@contoso ~]# sed -i -- 's/^protected-mode yes/protected-mode no/g' /etc/redis.conf * [root@contoso ~]# systemctl restart redis * [root@contoso ~]# cat > onlines.sh  #!/bin/bash  for ((i = 1;i < 11;i++))  do  echo "redis-cli -h 192.168.10.20 -p 6379 sAdd chat:fd:sets $i"  redis-cli -h 192.168.10.20 -p 6379 sAdd chat:fd:sets $i  done * [root@contoso ~]# bash onlines.sh *  * [myth@contoso ~]$ ab -r -t 3600 -s 3600 -k -n 1800 -c 200 "http://contoso.org:9502/index/server/run?hi=welcome%20to%20china" */class Server {    private $redis;    private $serv;    public function __construct() {        ini_set('default_socket_timeout', -1);    }    public function run() {        $this->redis = new \Redis;        $this->redis->connect('127.0.0.1', 6379, 0);        $this->serv = new swoole_websocket_server("0.0.0.0", 9502);        $this->serv->set(array(            'worker_num' => 4, //worker process num            'backlog' => 128, //listen backlog            'max_request' => 50,            'dispatch_mode' => 1,        ));        $this->serv->on('Open', function ($server, $req) {            $this->redis->sAdd('chat:fd:sets',$req->fd);            echo "\n connection open: " . $req->fd . "\n";        });        $this->serv->on('Message', function ($server, $frame) {            echo "\n message: " . $frame->data . "\n";            $onlines = $this->redis->sMembers('chat:fd:sets');            if (is_array($onlines)) {                foreach($onlines as $fd){                    @$server->push($fd, $frame->data);                }            }        });        // http://contoso.org:9502/index/server/run?hi=moxi,moxi        $this->serv->on('Request', function ($req, $respone) {            echo "\n fd: " . $respone->fd . "\n";            if(isset($req->get['hi'])){  // 判断下是否有数据                  $onlines = $this->redis->sMembers('chat:fd:sets');                if(is_array($onlines)){                    foreach($onlines as $fd){                        @$this->serv->push($fd, $req->get['hi']);                    }                }            }              $respone->end("success");          });        $this->serv->on('Close', function ($server, $fd) {            echo "\n connection close: \n" . $fd;        });        $this->serv->start();    }}


<!DOCTYPE html><html>     <head>         <meta http-equiv="Content-Type" content="text/html;charset=utf-8">        <title>WebSoketClient1</title>         <script src="http://code.jquery.com/jquery-1.4.4.min.js" type="text/javascript"></script>        <script type="text/JavaScript">             //验证浏览器是否支持WebSocket协议            if (!window.WebSocket) {                 alert("WebSocket not supported by this browser!");             }              var ws;            function display() {                 ws=new WebSocket('ws://contoso.org:9502');                 //监听消息                ws.onmessage = function(event) {                     log(event.data);                };                 ws.onclose = function(event) {                   log("socket连接已断开");                };                 // 打开WebSocket                ws.onopen = function(){                    log("socket连接已打开");                                    };                ws.onerror =function(event){                    log("ERROR:" + event.data);                };            }             var log = function(s) {                  if (document.readyState !== "complete") {                      log.buffer.push(s);                  } else {                      document.getElementById("contentId").innerHTML += (s + "\n");                  }               }              function sendMsg(){                var msg=document.getElementById("messageId");                ws.send(msg.value);             }        </script>     </head>     <body onload="display();" width="120px" height="220px">         <textarea rows="20" cols="30" id="contentId"></textarea>        <br/>        <input name="message" id="messageId"/>        <button id="sendButton" onClick="javascript:sendMsg()" >Send</button>    </body> </html> 


原创粉丝点击