国产+高潮+在线,国产 av 仑乱内谢,www国产亚洲精品久久,51国产偷自视频区视频,成人午夜精品网站在线观看

phpsocketio 過一夜 可以連接成功但是emit不執(zhí)行

HL

phpsocketio 過一夜 可以連接成功但是emit不執(zhí)行

3512 10 0
10個回答

walkor 打賞

emit不執(zhí)行的時候執(zhí)行 php start.php status,截圖下。注意是在emit不執(zhí)行的時候截圖

a1071121140

這是emit 不執(zhí)行的截圖

  • walkor 2020-04-08

    status 看沒有問題。
    如果要解決,需要你提供更詳細的信息。
    包括代碼,測試方法,測試截圖

  • a1071121140 2020-04-08

    @1:這個就是兩段代碼 一段是 js 第一段是 php

  • a1071121140 2020-04-08

    @1:就是 每個頁面 都引入了 這段js代碼,主要就是用來記錄 當前用戶在這個頁面瀏覽了多長時間

  • walkor 2020-04-08

    不要在評論里放代碼,沒辦法格式化。你在回復(fù)里放,還有測試步驟,測試結(jié)果截圖

a1071121140
<?php
use Workerman\Worker;
use PHPSocketIO\SocketIO;

include __DIR__ . '/vendor/autoload.php';

//全局數(shù)組,保存正在監(jiān)聽的頁面的信息
$routeInfo = array();
// 傳入ssl選項,包含證書的路徑
$context = array(
    'ssl' => array(
        'local_cert'  => '/etc/letsencrypt/live/xcx.ldcl3.cc/fullchain.pem',
        'local_pk'    => '/etc/letsencrypt/live/xcx.ldcl3.cc/privkey.pem',
        'verify_peer' => false,
    )
);
include __DIR__.'/helper.php';
$Helper = new Helper();
// PHPSocketIO服務(wù)
$sender_io = new SocketIO(2120,$context);
// 客戶端發(fā)起連接事件時,設(shè)置連接socket的各種事件回調(diào)
$sender_io->on('connection', function($socket){
    // 當客戶端發(fā)來登錄事件時觸發(fā)

    pdo_insert('logs',array('msg'=>'connection=>'));

    $socket->on('login', function ($data)use($socket){

         pdo_insert('logs',array('msg'=>'login=>'.$socket->uid));
        // 已經(jīng)登錄過了
        if(isset($socket->uid)){
            return;
        }
        global $Helper,$routeInfo;

        //這是瀏覽記錄的參數(shù)
        $uid  = (string)$data['mid'];

        pdo_insert('logs',array('msg'=>'login=>'.$uid));

        $uniacid = $data['uniacid'];
        $route_title = $data['route_title'];
        $route = $data['route'];
        $parem = $data['parem'];
        //額外參數(shù)
        $courseid = $data['courseid'];
        $chapterid = $data['chapterid'];

        if(isset($routeInfo[$uid])){
            //如果存在 則先釋放掉之前的頁面監(jiān)聽
            //結(jié)束瀏覽
            if($routeInfo[$uid]['routeid']>0){
                $Helper->closeView($routeInfo[$uid]['routeid'],$routeInfo[$uid]['jointime']);
            }
            //結(jié)束瀏覽學(xué)習(xí)
            if($routeInfo[$uid]['view_recordid']>0){
                $Helper->closeStudyView($routeInfo[$uid]['view_recordid'],$routeInfo[$uid]['jointime']);
            }
            //結(jié)束學(xué)習(xí)
            if($routeInfo[$uid]['play_recordid']>0){
                $Helper->endStudy($routeInfo[$uid]['play_recordid'],$routeInfo[$uid]['play_starttime']);
            }

        }

        $socket->uid = $uid;

        if($chapterid>0){
             $view_recordid = $Helper->intoStudyView($uid,$uniacid,$courseid,$chapterid);   
        }

        $routeInfo[$uid] = array(
            'jointime'=>time(),
            'routeid'=>$Helper->intoView($uid,$uniacid,$route_title,$route,$parem),
            'view_recordid'=>$view_recordid,

        );

    });
     $socket->on('study', function ($data)use($socket){

        if(!isset($socket->uid))
        {
             return;
        }
        global $Helper,$routeInfo;

        $type = $data['type'];
        $uid = $data['mid'];
        $uniacid = $data['uniacid'];
        $courseid = $data['courseid'];
        $chapterid = $data['chapterid'];
        //開始計數(shù)之前先結(jié)束掉正在計數(shù)的內(nèi)容
        if($routeInfo[$uid]['play_recordid']>0){
            $Helper->endStudy($routeInfo[$uid]['play_recordid'],$routeInfo[$uid]['play_starttime']);

        }
        if($type=='start'){

            $routeInfo[$uid]['play_recordid'] = $Helper->startStudy($uid,$uniacid,$courseid,$chapterid);

            $routeInfo[$uid]['play_starttime'] = time();
        }

    });
    // 當客戶端斷開連接是觸發(fā)(一般是關(guān)閉網(wǎng)頁或者跳轉(zhuǎn)刷新導(dǎo)致)
    $socket->on('disconnect', function () use($socket) {

        if(!isset($socket->uid))
        {
             return;
        }
        global $Helper,$routeInfo;

        //結(jié)束瀏覽
        if($routeInfo[$socket->uid]['routeid']>0){
            $Helper->closeView($routeInfo[$socket->uid]['routeid'],$routeInfo[$socket->uid]['jointime']);
        }
        //結(jié)束瀏覽學(xué)習(xí)
        if($routeInfo[$socket->uid]['view_recordid']>0){
            $Helper->closeStudyView($routeInfo[$socket->uid]['view_recordid'],$routeInfo[$socket->uid]['jointime']);
        }
        //結(jié)束學(xué)習(xí)
        if($routeInfo[$socket->uid]['play_recordid']>0){
            $Helper->endStudy($routeInfo[$socket->uid]['play_recordid'],$routeInfo[$socket->uid]['play_starttime']);
        }

        unset($routeInfo[$socket->uid]);
    });
});

if(!defined('GLOBAL_START'))
{
    Worker::runAll();
}

-------------------------------
  • 暫無評論
a1071121140
define(['core', 'tpl'], function (core, tpl) {
    var modal = {};
    var params = {};
    modal.init = function (param) {
        params=param;
        modal.socket();   
    };
    modal.socket = function () {
        // 連接服務(wù)端
        var socket = io('https://xcx.ldcl3.cc:2120');
        var data = {
            mid:params.mid,
            uniacid:params.uniacid,
            route_title:document.title ? document.title:'',
            route:document.URL,
            courseid:params.courseid,
            chapterid:params.chapterid,
            parem:params.parem,
        };

        // 連接后登錄
        socket.on('connect', function($aa){

            console.log($aa);

            socket.emit('login', data);
        });

        //點擊 發(fā)送 數(shù)據(jù)
        $("#send_aa").click(function(){

            socket.emit('study', data);

        })

    };

    return modal
});
  • 暫無評論
walkor 打賞

$Helper = new Helper();
這里是初始化了數(shù)據(jù)庫么?

a1071121140
<?php
require dirname(__FILE__) . '/../../../../framework/bootstrap.inc.php';

class Helper{

     private $route_view = 'ldy_shop_route_view';

     private $play_record = 'ldy_shop_knowledgepay_play_record';

     private $view_record = 'ldy_shop_knowledgepay_view_record';
    /*
     * 記錄瀏覽頁面
     * (int)mid 用戶id,
     * (string)route 訪問路徑
     * (string)route_title 路徑對應(yīng)的標題
     */

    public function intoView($mid,$uniacid,$route_title,$route,$parem){
        //往記錄表中增加記錄
        if(empty($parem)){
            $parem = 'index';
        }

        $mid = explode("_",$mid)[1];

        //查詢今天有沒有瀏覽過這個頁面
        $view_log = pdo_fetch("select id,view_cnt from " .tablename($this->route_view). " where mid=:mid and parem=:parem and create_time between unix_timestamp(curdate()) and unix_timestamp(now()) order by id desc limit 1",array(':mid'=>$mid,':parem'=>$parem));

        pdo_insert('logs',array('msg'=>serialize($view_log)));

        if(empty($view_log)){
            //添加一條記錄
            $data = array(
                'uniacid'=>$uniacid,
                'mid'=>$mid,
                'route'=>$route,
                'route_title'=>$route_title,
                'create_time'=>time(),
                'view_cnt'=>1,
                'view_time'=>1,
                'parem'=>$parem,
            );
            pdo_insert($this->route_view,$data);
            $id = pdo_insertid();
        }else{
            //更新一條記錄
            pdo_update($this->route_view,array('view_cnt'=>$view_log['view_cnt']+1),array('id'=>$view_log['id']));
            $id = $view_log['id'];
        }

        return $id;

    }
    /*
     * 關(guān)閉連接(結(jié)束瀏覽)
     * 瀏覽記錄ID $routeid
     * 
     */
    public function closeView($routeid,$jointime){

        $view_log = pdo_fetch("select id,view_time from " .tablename($this->route_view). " where id=:id",array(':id'=>$routeid));

        if($view_log){
            //計算瀏覽時間
            $view_time = time()-$jointime;
            //疊加時間

            pdo_update($this->route_view,array('view_time'=>$view_log['view_time']+$view_time,'end_time'=>time()),array('id'=>$view_log['id']));

        }
        return true;
    }

    /*
     * 開始學(xué)習(xí)
     *  
     */
    public function startStudy($mid,$uniacid,$courseid,$chapterid){
        //查詢今天有沒有學(xué)習(xí)過這個課程中的章節(jié)
        $mid = explode("_",$mid)[1];
        $play_record = pdo_fetch("select id from " .tablename($this->play_record). " where mid=:mid and courseid=:courseid and chapterid=:chapterid and create_time between unix_timestamp(curdate()) and unix_timestamp(now()) order by id desc limit 1",array(':mid'=>$mid,':courseid'=>$courseid,':chapterid'=>$chapterid));
        if(empty($play_record)){
            //添加一條學(xué)習(xí)記錄
            $data = array(
                'uniacid'=>$uniacid,
                'courseid'=>$courseid,
                'chapterid'=>$chapterid,
                'mid'=>$mid,
                'create_time'=>time(),
                'study_duration'=>1
            );
            pdo_insert($this->play_record,$data);

            $play_recordid = pdo_insertid();
        }else{

            $play_recordid = $play_record['id'];
            pdo_update($this->play_record,array('study_duration'=>$play_record['study_duration']+1),array('id'=>$play_record['id']));

        }

        return $play_recordid;

    }
    /*
     * 結(jié)束學(xué)習(xí)
     */
    public function endStudy($play_recordid,$starttime){

        $end_time = time();
        $study_duration = $end_time - $starttime;
        //
        $play_record = pdo_fetch("select id,study_duration from " .tablename($this->play_record). " where id=:id",array(':id'=>$play_recordid));
        if($play_record){

            pdo_update($this->play_record,array('study_duration'=>$play_record['study_duration']+$study_duration),array('id'=>$play_recordid));

        }

        return true;

    }
    /*
     * 開始瀏覽學(xué)習(xí)
     * 
     */
    public function intoStudyView($mid,$uniacid,$courseid,$chapterid){
        //往記錄表中增加記錄
        $mid = explode("_",$mid)[1];
        //查詢今天有沒有瀏覽過這個頁面
        $view_log = pdo_fetch("select id,view_cnt from " .tablename($this->view_record). " where mid=:mid and courseid=:courseid and chapterid=:chapterid and create_time between unix_timestamp(curdate()) and unix_timestamp(now()) order by id desc limit 1",array(':mid'=>$mid,':courseid'=>$courseid,':chapterid'=>$chapterid));

        if(empty($view_log)){
            //添加一條記錄
            $data = array(
                'uniacid'=>$uniacid,
                'mid'=>$mid,
                'courseid'=>$courseid,
                'chapterid'=>$chapterid,
                'create_time'=>time(),
                'view_cnt'=>1,
                'view_time'=>1
            );
            pdo_insert($this->view_record,$data);
            $id = pdo_insertid();
        }else{
            //更新一條記錄
            pdo_update($this->view_record,array('view_cnt'=>$view_log['view_cnt']+1),array('id'=>$view_log['id']));
            $id = $view_log['id'];
        }

        return $id;

    }
    /*
     * 結(jié)束瀏覽學(xué)習(xí)
     * 
     */
    public function closeStudyView($view_recordid,$jointime){

        $view_log = pdo_fetch("select id,view_time from " .tablename($this->view_record). " where id=:id",array(':id'=>$view_recordid));

        if($view_log){
            //計算瀏覽時間
            $view_time = time()-$jointime;
            //疊加時間

            pdo_update($this->view_record,array('view_time'=>$view_log['view_time']+$view_time,'end_time'=>time()),array('id'=>$view_log['id']));

        }
        return true;
    }

}

?>
  • 暫無評論
a1071121140

![](//www.wtbis.cn/upload/20200408/085e8d4925e75a.png)

bootstrap.inc.php 里面引入了 pdo方法,然后pdo 再去初始化數(shù)據(jù)庫

  • 暫無評論
walkor 打賞

判斷無法觸發(fā)emit是根據(jù)什么判斷的,數(shù)據(jù)庫沒有寫入數(shù)據(jù)了?

  • a1071121140 2020-04-08

    是根據(jù)數(shù)據(jù)庫沒有寫入數(shù)據(jù)判斷的,然后我也在想 是不是數(shù)據(jù)庫一直連著,導(dǎo)致是數(shù)據(jù)庫斷開了

  • a1071121140 2020-04-08

    數(shù)據(jù)庫初始化的時候 我是不是應(yīng)該放在 connection的回調(diào)里面,這樣每次用戶連接的時候 就初始化

walkor 打賞

應(yīng)該是數(shù)據(jù)庫連接長時間不使用被mysql服務(wù)端斷開了,然后你的數(shù)據(jù)庫類沒有做重連,導(dǎo)致數(shù)據(jù)無法寫入數(shù)據(jù)庫。
解決辦法有2種
第一種、數(shù)據(jù)庫連接使用完就關(guān)閉,下次使用時再重連數(shù)據(jù)庫
第二種、把初始化數(shù)據(jù)庫連接放到onworkerStart 里。并且做好數(shù)據(jù)庫斷開重連的操作,重連參考 https://github.com/walkor/mysql/blob/master/src/Connection.php#L1748 ,后者直接使用http://doc.workerman.net/components/workerman-mysql.html 這個數(shù)據(jù)庫類,它自帶重連功能。
$sender_io->on('workerStart', function()use($io) {
// 初始化數(shù)據(jù)庫連接
});

  • a1071121140 2020-04-08

    我用的是 phpsocketio 請問應(yīng)該放哪個位置

  • walkor 2020-04-08

    初始化連接放到workerStart里
    $sender_io->on('workerStart', function()use($io) {
    // 初始化數(shù)據(jù)庫連接
    });

  • a1071121140 2020-04-08

    謝謝

  • a1071121140 2020-04-08

    @1:已經(jīng)把數(shù)據(jù)庫連接 改成了workerman 自帶的類,就看明天會不會斷開連接了

a1071121140

測試就是 每次進入頁面 都會去 連接 并且登錄

  • 暫無評論
年代過于久遠,無法發(fā)表回答
??