zoukankan      html  css  js  c++  java
  • 续安装好composer和workerman之后;TP5运行workerman的操作

    TP5想要实现时时通讯:首先先安装好composer和workerman,我之前有写一篇安装的方法,在cmd里面安装;tp5手册上面有写cmd命令的代码;接下来是安装好后如何运行的;

    首先在项目中建立一个模块,这边就叫socket模块吧,里面有控制器,index.php;在此之前在config配置文件里面将

    'default_module'         => 'socket',默认加载的模块为socket;
    然后,在控制器里面写代码:
    <?php
    namespace appsocketcontroller;
    use thinkworkerServer;
    use WorkermanLibTimer;
    use thinkDb;
    class Index extends Server
    {
        protected $socket = 'websocket://localhost:2346';
    
        /**
         * 收到信息
         * @param $connection
         * @param $data
         */
        public function onMessage($connection, $data)
        {
            $connection->send('我收到你的信息了');
        }
    
        /**
         * 当连接建立时触发的回调函数
         * @param $connection
         */
        public function onConnect($connection)
        {
          
        }  
    
        /**
         * 当连接断开时触发的回调函数
         * @param $connection
         */
        public function onClose($connection)
        {
    
        }
    
        /**
         * 当客户端的连接上发生错误时触发
         * @param $connection
         * @param $code
         * @param $msg
         */
        public function onError($connection, $code, $msg)
        {
            echo "error $code $msg
    ";
        }
    
        /**
         * 每个进程启动
         * @param $worker
         */
        public function onWorkerStart($worker)
        {
           
            Timer::add(5, function()use($worker){
                
                $online_people_count = Db::name('session')->count();
                $deal_order_count    = Db::name('order')->where('order_status',1)->count();
                $sale_server_count   = Db::name('service')->where('service_status',1)->count();
                //echo "".$online_people_count.'--------'.$deal_order_count.'----------'.$sale_server_count;
                
                $z="{$online_people_count},{$deal_order_count},{$sale_server_count}";
                
                foreach($worker->connections as $connection) {
                    $connection->send($z);
                }
            });
        }
    }
    这边的代码主要还是看,onWorkerStart这个方法,这个方法,获取数据库的值之后,传给需要接收那个数据的
    视图模块,就是页面需要哪里显示那个数据,就是通过这里来发送的数据,这里是每五秒访问一次数据库
    有了这些之后在,视图模块代码里面接收数据的代码:
    //监听消息
       // 连接服务端
        try{
           ws = new WebSocket("ws://localhost:2346");
           ws.onopen = function() {
              console.log('连接成功');
    
           };
           ws.onmessage = function(e) {
               var result = e.data.split(',');
               if(result.length==3){
                   $("#on_people_sum").html(result[0]);
                  $("#menu23").html(result[1]);
                  $("#menu28").html(result[2]);  
               }
            
           };
           
       }catch(err){
          
       } 
    这样上面的result[0]...;就是数据库中获取的数据,只要数据有改变这个值就会改变;
    最后在cmd里面运行D:phpStudyWWWestonapppublic>php index.php
    ----------------------- WORKERMAN -----------------------------
    Workerman version:3.3.90          PHP version:5.4.45
    ------------------------ WORKERS -------------------------------
    worker        listen                      processes status
    none          websocket://localhost:2346   4        [OK]
    ----------------------------------------------------------------
    Press Ctrl-C to quit. Start success.这是最终结果;这样就能时时获取数据库的数据了;
  • 相关阅读:
    iOS开发拓展篇—音频处理(音乐播放器5)
    在Unity中接入Xbox360手柄
    POJ 2531 Network Saboteur(DFS)
    小塔1024实现
    Cocos2dx--开发环境搭建
    2.7 视图合并
    Cocos2d-X开发中国象棋《四》设计游戏场景
    libsqlite3.dylib与libsqlite3.0.dylib的差别
    AsyncTask
    开发,从需求出发 &#183; 之二 造飞机的工厂
  • 原文地址:https://www.cnblogs.com/houdj/p/7750758.html
Copyright © 2011-2022 走看看