成人性生交大片免费看视频r_亚洲综合极品香蕉久久网_在线视频免费观看一区_亚洲精品亚洲人成人网在线播放_国产精品毛片av_久久久久国产精品www_亚洲国产一区二区三区在线播_日韩一区二区三区四区区区_亚洲精品国产无套在线观_国产免费www

主頁 > 知識庫 > ThinkPHP5.0框架結(jié)合Swoole開發(fā)實現(xiàn)WebSocket在線聊天案例詳解

ThinkPHP5.0框架結(jié)合Swoole開發(fā)實現(xiàn)WebSocket在線聊天案例詳解

熱門標簽:保定crm外呼系統(tǒng)運營商 海南人工外呼系統(tǒng)有效果嗎 阿里云400電話申請加工單 智能電話機器人排名前十名南京 抖音有個地圖標注是什么意思 七魚外呼系統(tǒng)停用嗎 地下城堡2圖九地圖標注 九江外呼系統(tǒng) 西區(qū)企業(yè)怎么做地圖標注入駐

本文實例講述了ThinkPHP5.0框架結(jié)合Swoole開發(fā)實現(xiàn)WebSocket在線聊天案例。分享給大家供大家參考,具體如下:

ThinkPHP使用Swoole需要安裝 think-swoole Composer包,前提系統(tǒng)已經(jīng)安裝好了Swoole PECL 拓展(相關(guān)文章:Linux下源碼包安裝使用Swoole擴展)

在tp5的項目根目錄下執(zhí)行composer命令安裝think-swoole:

composer require topthink/think-swoole

安裝成功:

話不多說,直接上代碼:

新建WebSocket.php控制器:

(監(jiān)聽端口要確認服務(wù)器放行,寶塔環(huán)境還需要添加安全組規(guī)則)

?php

namespace app\home\controller;
use think\swoole\Server;
class WebSocket extends Server
{
  protected $host = '0.0.0.0'; //監(jiān)聽所有地址
  protected $port = 9501; //監(jiān)聽9501端口
  protected $serverType = 'socket';
  protected $option = [ 
    'worker_num'=> 4, //設(shè)置啟動的Worker進程數(shù)
    'daemonize'	=> false, //守護進程化(上線改為true)
    'backlog'	=> 128, //Listen隊列長度
    'dispatch_mode' => 2, //固定模式,保證同一個連接發(fā)來的數(shù)據(jù)只會被同一個worker處理

    //心跳檢測:每60秒遍歷所有連接,強制關(guān)閉10分鐘內(nèi)沒有向服務(wù)器發(fā)送任何數(shù)據(jù)的連接
    'heartbeat_check_interval' => 60,
    'heartbeat_idle_time' => 600
  ];

  //建立連接時回調(diào)函數(shù)
  public function onOpen($server,$req)
  {
    $fd = $req->fd;//客戶端標識
    $uid = $req->get['uid'];//客戶端傳遞的用戶id
    $token = $req->get['token'];//客戶端傳遞的用戶登錄token
    
    //省略token驗證邏輯......
    if (!$token) {
      $arr = array('status'=>2,'message'=>'token已過期');
      $server->push($fd, json_encode($arr));
      $server->close($fd);
      return;
    }
    //省略給用戶綁定fd邏輯......
    echo "用戶{$uid}建立了連接,標識為{$fd}\n";
  }

  //接收數(shù)據(jù)時回調(diào)函數(shù)
  public function onMessage($server,$frame)
  {
    $fd = $frame->fd;
    $message = $frame->data;

    //省略通過fd查詢用戶uid邏輯......
    $uid = 666;
    $data['uid'] = $uid;
    $data['message'] = '用戶'.$uid.'發(fā)送了:'.$message;
    $data['post_time'] = date("m/d H:i",time());
    $arr = array('status'=>1,'message'=>'success','data'=>$data);

    //僅推送給當(dāng)前連接用戶
    //$server->push($fd, json_encode($arr));
    
    //推送給全部連接用戶
    foreach($server->connections as $fd) {
      $server->push($fd, json_encode($arr));
    } 
  }

  //連接關(guān)閉時回調(diào)函數(shù)
  public function onClose($server,$fd)
  {
    echo "標識{$fd}關(guān)閉了連接\n";
  }
}

前端演示頁面:

(省略控制器判斷登錄狀態(tài)、分配數(shù)據(jù)邏輯......)

!DOCTYPE html>
html lang="en">
head>
meta charset="UTF-8" />
meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
title>Chat/title>
link rel="stylesheet" type="text/css" href="/static/liaotian/chat.css" rel="external nofollow" />
script src="/static/liaotian/js/jquery.min.js">/script>
script src="/static/liaotian/js/flexible.js">/script>
/head>
body>
  header class="header">
    a class="back" href="javascript:history.back()" rel="external nofollow" >/a>
    h5 class="tit">在線聊天/h5>
    a href="">div class=" rel="external nofollow" right">退出/div>/a>
  /header>

  !-- 聊天內(nèi)容 start-->
	div class="message"> /div>
  !-- 聊天內(nèi)容 end-->

  !-- 底部 start-->
  div class="footer">
    img id="setbtn" src="/static/liaotian/images/hua.png" alt="" />
    img src="/static/liaotian/images/xiaolian.png" alt="" />
    input type="text" id="msg" value="" maxlength="300">
    p style="background: rgb(17, 79, 142);" id="sendBtn">發(fā)送/p>
  /div>
  !-- 底部 end-->
/body>
/html>
script src="http://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js">/script>
script src="https://cdn.bootcss.com/layer/3.1.0/layer.js">/script>
script type="text/javascript">
$(function () {
  var uid = 666;//當(dāng)前用戶id
  var token = 'abcdefg';//用戶token

  //判斷瀏覽器是否支持WebSocket
  var supportsWebSockets = 'WebSocket' in window || 'MozWebSocket' in window;
  if (supportsWebSockets) {
    //建立WebSocket連接(ip地址換成自己主機ip)
    var ws = new WebSocket("ws://127.0.0.1:9501?uid="+uid+"token="+token);
    ws.onopen = function () {
      layer.msg('服務(wù)器連接成功',{shade:0.1,icon:1,time:600});
    };
    ws.onerror = function () {
      layer.msg('服務(wù)器連接失敗',{shade:0.1,icon:2,time:600});
    };
    ws.onmessage = function (evt) {
      var data = $.parseJSON(evt.data);
      //錯誤提示
      if(data.status != 1){
        layer.alert(data.message,{icon:2});
        return;
      }
      //消息返回
      if (data.status==1  data.data.message!='') {
        var html = "";
        if (data.data.uid == uid) {
          html += "div style='word-break:break-all' class=\"show\">div class=\"time\">"+data.data.post_time+"/div>div class=\"msg\">img src=\""+data.data.head_img+"\" alt=\"\" />p>i clas=\"msg_input\">/i>"+data.data.message+"/p>/div>/div>";
        }else{
          html += "div style='word-break:break-all' class=\"send\">div class=\"time\">"+data.data.post_time+"/div>div class=\"msg\">img src=\""+data.data.head_img+"\" alt=\"\" />p>i clas=\"msg_input\">/i>"+data.data.message+"/p>/div>/div>";
        }
      }
      $(".message").append(html);
      setTimeout(function () {
        ($('.message').children("div:last-child")[0]).scrollIntoView();//向上滾動
      },100);
    };
    ws.onclose = function (res) {
      
    };
    //按鈕發(fā)送
    $("#sendBtn").click(function () {
      var contents = $("#msg").val().trim();
      if(contents == null || contents == ""){
        layer.msg('內(nèi)容為空',{shade:0.1,icon:2,time:600});      
        return false;
      }else{
      	ws.send(contents);
      	$("#msg").val("");
      }
    });
    //回車發(fā)送
    $("#msg").keydown(function (evel) {
      var that = $(this);
      if (evel.keyCode == 13) {
        evel.cancelBubble = true;
        evel.preventDefault();
        evel.stopPropagation();
        var contents = that.val().trim();
        if(contents == null || contents == ""){
          layer.msg('內(nèi)容為空',{shade:0.1,icon:2,time:600});       
          return false;
        }else{
          ws.send(contents);
          that.val("");
        }
      }
    });
  }else{
    layer.alert("您的瀏覽器不支持 WebSocket!");
  }
});
/script>

服務(wù)器移到項目根目錄開啟服務(wù):

php public/index.php Websocket/start

(這里的路徑,是因為我綁定了home模塊為默認模塊,tp5默認情況是:php public/index.php index/Websocket/start

開啟成功,查看端口已經(jīng)被監(jiān)聽:

lsof -i:9501

 演示效果如下:

服務(wù)器監(jiān)聽如下:

用戶每刷新重連一次,fd標識都會改變。

更多關(guān)于thinkPHP相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《ThinkPHP入門教程》、《thinkPHP模板操作技巧總結(jié)》、《ThinkPHP常用方法總結(jié)》、《codeigniter入門教程》、《CI(CodeIgniter)框架進階教程》、《Zend FrameWork框架入門教程》及《PHP模板技術(shù)總結(jié)》。

希望本文所述對大家基于ThinkPHP框架的PHP程序設(shè)計有所幫助。

您可能感興趣的文章:
  • php+websocket 實現(xiàn)的聊天室功能詳解
  • PHP 實現(xiàn) WebSocket 協(xié)議原理與應(yīng)用詳解
  • PHP框架實現(xiàn)WebSocket在線聊天通訊系統(tǒng)
  • PHP用swoole+websocket和redis實現(xiàn)web一對一聊天
  • PHP實現(xiàn)websocket通信的方法示例
  • php redis 處理websocket聊天記錄的實例代碼
  • PHP實現(xiàn)WebSocket實例詳解

標簽:十堰 昭通 韶關(guān) 甘肅 梅河口 涼山 九江 遼陽

巨人網(wǎng)絡(luò)通訊聲明:本文標題《ThinkPHP5.0框架結(jié)合Swoole開發(fā)實現(xiàn)WebSocket在線聊天案例詳解》,本文關(guān)鍵詞  ThinkPHP5.0,框架,結(jié)合,Swoole,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《ThinkPHP5.0框架結(jié)合Swoole開發(fā)實現(xiàn)WebSocket在線聊天案例詳解》相關(guān)的同類信息!
  • 本頁收集關(guān)于ThinkPHP5.0框架結(jié)合Swoole開發(fā)實現(xiàn)WebSocket在線聊天案例詳解的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    精品视频在线播放色网色视频| 中文字幕在线看视频国产欧美在线看完整| 成人天堂资源www在线| 性感美女一区二区在线观看| 国产高清在线精品| 99久久无色码| 国产成在线观看免费视频| 国产l精品国产亚洲区久久| 中文字幕一区二区中文字幕| 综合电影一区二区三区| 亚洲jizzjizz日本少妇| 国产黄色免费看| 日韩在线免费高清视频| 国产91精品入| 57pao国产成永久免费视频| 亚洲人成久久| 丰满少妇又爽又紧又丰满69| 欧美一级一片| 久久影院一区| xfplay资源站色先锋在线观看| 午夜精品剧场| 孩xxxx性bbbb欧美| 中文字幕一区二区三区不卡在线| 蜜桃视频久久一区免费观看入口| 91制片厂毛片| www.日韩欧美| 久久国产精品亚洲77777| 国产精品蜜臀av| 96av在线| 色七七在线观看| 2020av在线| 变态调教一区二区三区| 亚洲欧洲日韩女同| 亚洲免费视频播放| 又色又爽的视频| 免费在线黄网| 波多野结衣大片| 欧美激情久久久久久| 精品捆绑调教一区二区三区| 中文字幕国语官网在线视频| 日韩国产精品一区| 136福利视频导航| 潘金莲一级黄色片| 亚洲同志男男gay1069网站| 精品肉辣文txt下载| 成人晚上爱看视频| 免费人成在线观看| 久久野战av| 欧美专区亚洲专区| 精品成人免费观看| 99超碰麻豆| 天天舔天天干天天操| 精品成人乱色一区二区| 久久久久人妻一区精品色欧美| 亚洲国产人成综合网站| cao在线观看| 91视频青青草| 欧美成人中文| 午夜影院在线观看国产主播| 精品视频一区三区九区| 亚洲免费av网| 欧美视频精品全部免费观看| 黄色一级视频网站| 亚洲AV成人无码网站天堂久久| 在线三级电影| 91中文在线观看| 黄色大秀av大片| 中文字幕影音先锋| 午夜视频你懂的| 免费毛片在线播放| 欧美色道久久88综合亚洲精品| 女同久久另类69精品国产| www.操操操.com| 日韩精品一区二区三区四| 久久久久久久久久久网| 一区二区福利| 国产福利电影在线| 精品一区二区三区无码视频| 成年人免费视频观看| 3d玉蒲团在线观看| 在线观看私人影院w| 精品视频二区三区| 日韩av影视大全| 久久久久久久久久久免费精品| 精品国产18久久久久久二百| 国产自产视频一区二区三区| 亚洲美女网站18| 草色在线视频| 蜜桃欧美视频| 中文字幕人妻熟女人妻洋洋| 午夜国产精品理论片久久影院| 成人亚洲免费视频| 在线精品亚洲一区二区| 亚洲精品国产成人| 免费在线一区观看| 456亚洲影院| 日本高清视频www| 99国产精品久久一区二区三区| 中文字幕制服丝袜| 一级毛片免费观看| 美女在线免费视频| 亚洲精品1区2区3区| 国产又粗又长又硬| 91精品啪在线观看国产60岁| 亚洲国产天堂久久综合| 亚洲欧美另类久久久精品2019| 91麻豆精品91久久久久久清纯| 九9re精品视频在线观看re6| 五月天激情小说综合| 精品麻豆国产| 亚洲a v网站| 一级黄色片在线看| 91免费视频网站在线观看| 精品一区二三区| 风间由美一区| 岛国视频一区免费观看| 99热免费在线| 久久草在线视频| 女人黄色片免费| 国产麻豆精品95视频| 欧美韩国日本不卡| 最新精品国偷自产在线| 亚洲日本在线看| 校园春色亚洲| 国产日产亚洲精品| 色99之美女主播在线视频| 成人在线播放网址| 欧美成人激情视频免费观看| 国产cdts系列另类在线观看| 五月天婷婷激情网| 筱崎爱全乳无删减在线观看| 一区二区三区网站| www.久久成人| 国产精品久久久久久婷婷天堂| 日本熟妇一区二区三区| 久久久久亚洲综合| 精品国产凹凸成av人导航| 国产一区二区三区天码| 国产女教师bbwbbwbbw| 国产精品国产三级国产普通话99| 草草视频在线观看| 欧美三区四区| 国模无码视频一区二区三区| 欧洲另类一二三四区| 免费男女羞羞的视频网站中文字幕妖精视频| 99热手机在线观看| 国产精品爽黄69天堂a| 成人黄色在线免费观看| jlzzjlzz欧美大全| 国语自产精品视频在线看抢先版结局| 久久精品无码一区| 中文字幕一区二区三区精华液| 日韩精品2区| 不卡视频免费在线观看| 美女啪啪无遮挡| 中文字幕在线三区| 日本在线精品| 春意影院普通入口| 国内精品麻豆美女在线播放视频| 国产精品久久久久久久久久辛辛| 中文字幕97| 国产制服91一区二区三区制服| 久热精品在线观看| 亚洲欧美一区在线| 精品国产亚洲一区二区麻豆| 超碰在线一区| 亚洲高清资源综合久久精品| 欧美高清69hd| 久久精品视频免费在线观看| 91精品视频免费在线观看| 日韩精品中文字幕在线不卡尤物| 91午夜伦伦电影理论片| 8x国产一区二区三区精品推荐| 精品国产区一区二区三区在线观看| 精品国产综合久久| 国产资源中文字幕| www.久久爱.cn| 欧美日韩不卡| 亚洲乱码国产乱码精品精的特点| 亚洲精品系列| 欧美特黄色片| 麻豆成人免费视频| 天天综合天天添夜夜添狠狠添| 久久久美女艺术照精彩视频福利播放| 性高潮久久久久久久久久| 大地资源中文在线观看免费版| 天堂网av在线播放| 亚洲自拍偷拍网| 天天夜夜亚洲| 特级西西444www大精品视频| www.在线观看av| 亚洲综合自拍一区| 国产高清成人在线| 美女永久在线网站| 成人免费观看男女羞羞视频| 亚洲一区二区自拍偷拍| 麻豆精品少妇| xxxxxhd亚洲人hd| 污污视频网站免费观看| 亚洲精品黄色| www国产亚洲精品久久麻豆| 中文字幕日韩视频| 大陆极品少妇内射aaaaaa| 国产一区二区美女诱惑| 精品人妻无码一区二区性色| 国产女同一区二区| 一区二区免费在线观看视频| 午夜精品福利一区二区三区蜜桃| 成人久久久久久久| 在线视频日韩精品| 久久久精品人妻无码专区| 日日骚av一区二区| 3d动漫精品啪啪一区二区下载| 欧美性黄网官网| 99久免费精品视频在线观78| 国产青草视频在线观看视频| 亚洲电影在线一区二区三区| 国产麻豆成人传媒免费观看| 国产电影一区二区在线观看| 亚洲男女网站| 午夜激情视频在线| 少妇aaaaa| 国产精品久久久久久久久免费樱桃| 欧美一区二区三区播放老司机| 青娱乐国产在线| 欧美怡红院视频一区二区三区| 国内亚洲精品| 欧美a极品极品欧美| 一本色道久久综合狠狠躁篇的优点| 亚洲天堂av图片| 亚洲色图都市小说| 欧美男男大粗吊1069| 久久久久国产精品区片区无码| 日本黄色入口| 依人在线免费视频| 韩国精品在线观看| 精品少妇一区二区三区| 国产寡妇亲子伦一区二区三区四区| 久久久久久久久国产一区| 久久精品夜夜夜夜久久| 九九久久九九| a级黄色一级片| 91国产精品视频在线观看| 国风产精品一区二区| 久久高清视频免费| 黄色av免费看| 992tv成人国产福利在线| 免费看黄资源大全高清| 日韩精品无码一区二区三区| 日本一区二区三区四区五区六区| 在线国产精品一区| 亚洲裸色大胆大尺寸艺术写真| 国产精品爽黄69天堂a| 欧美精品黄色| 欧美成人一区二区三区在线观看| 国产精品成人av| 欧美三级电影一区二区三区| 欧美理论在线播放| 午夜精品av| 伊人精品一区| αv一区二区三区| 亚洲综合一区二区精品导航| 不卡的av在线播放| 午夜激情在线观看视频| 超碰中文字幕在线观看| 一区二区久久精品66国产精品| 精品国偷自产国产一区| 免费一级欧美在线大片| 国产福利在线免费观看| 99在线看视频| 加勒比一区二区三区在线| 色呦呦在线免费观看| 精产国品一区二区三区| 丝袜美腿小色网| 国产剧情久久久久久| 少妇高潮一区二区三区喷水| 中文字幕日本视频| 美女黄色片视频| 91福利在线免费| 日韩高清中文字幕一区二区| 日本特级黄色大片| 91青青草视频| 国产一级做a爰片久久毛片男| 久久精品无码一区| 国产一区亚洲一区| 91极品视觉盛宴| 一本久久a久久精品vr综合| 欧美日韩久久婷婷| 成人婷婷网色偷偷亚洲男人的天堂| 亚洲二区三区不卡| 欧美午夜aaaaaa免费视频| 欧美激情 一区| 狠狠色综合网站久久久久久久| 在线a人片免费观看视频| 九七影院理论片| 国产精品免费人成网站酒店| 亚洲国产精品无码久久| 亚洲女同一区二区| 99久久综合99久久综合网站| 9久久9毛片又大又硬又粗| 亚洲猫色日本管| 性欧美在线视频| 日本一区二区三区dvd视频在线| jzzjzzjzz亚洲成熟少妇| 九九在线视频| 久久精品在线免费视频| 国产一区视频导航| 午夜不卡福利视频| 色偷偷亚洲女人天堂观看欧| 欧美 亚欧 日韩视频在线| 成人黄色片视频| 欧美电影一区| 视频在线一区二区三区| 97久久夜色精品国产九色| 精品综合久久久久| 国产精品永久免费观看| 老女人性生活视频| 最新中文字幕亚洲| 亚洲精品久久久久久宅男| 国产日韩欧美第一页| 天堂8在线天堂资源bt| 亚洲激情第一页| 精品sm在线观看| 久久青草精品视频免费观看| 亚洲欧洲一区二区三区在线观看| 国产欧美日韩精品一区二区免费| 91麻豆国产自产在线观看| 88av在线视频|