web-msg-sender(socket主動(dòng)推送)

web-msg-sender地址(windows)

這個(gè)邏輯包來自與我對(duì)php的websocket了解 由于原聲寫websocket 更何況我是一個(gè)小白 還需要一個(gè)段時(shí)間不能完成的需求(php websocket 主動(dòng)推送 還有 php7.3 多線程原因)
主要應(yīng)用 : 微信支付完成推送前端數(shù)據(jù)

  • 我為什么不去谷狗 ?
    集中答案如下
  1. 開啟多線程模式
    很簡單 看不懂 太高深 短時(shí)間內(nèi)不可能完成 更何況一點(diǎn)都不通的 websocket多線程模式
    在來講一講 怎么安裝web-msg-sender
    如果沒有composer 的話 請(qǐng)先安裝這個(gè) composer 官網(wǎng)地址
    composer是PHP的包管理、包依賴關(guān)系管理工具(就像node的npm一樣),有了它,我們就很輕松一個(gè)命令就可以把他人優(yōu)秀的代碼用到我們的項(xiàng)目中來,而且很容易管理依賴關(guān)系,更新刪除等操作也很輕易的實(shí)現(xiàn)。

安裝composer (windows)

  1. 下載安裝腳本 - composer-setup.php - 到當(dāng)前目錄: php -r "copy('https://install.phpcomposer.com/installer', 'composer-setup.php');"
  2. 執(zhí)行安裝過程 : php composer-setup.php
  3. 刪除安裝腳本 : php -r "unlink('composer-setup.php');"

局部安裝

上述下載 Composer 的過程正確執(zhí)行完畢后,可以將 composer.phar 文件復(fù)制到任意目錄(比如項(xiàng)目根目錄下),然后通過 php composer.phar 指令即可使用 Composer 了!

全局安裝

  1. 找到并進(jìn)入 PHP 的安裝目錄(和你在命令行中執(zhí)行的 php 指令應(yīng)該是同一套 PHP)。
  2. 將 composer.phar 復(fù)制到 PHP 的安裝目錄下面,也就是和 php.exe 在同一級(jí)目錄。
  3. 在 PHP 安裝目錄下新建一個(gè) composer.bat 文件,并將下列代碼保存到此文件中。
    @php "%~dp0composer.phar" %*
    最后重新打開一個(gè)命令行窗口試一試執(zhí)行 composer --version 看看是否正確輸出版本號(hào)。

切換為國內(nèi)鏡像:composer config -g repo.packagist composer https://packagist.phpcomposer.com

  • 安裝依賴
    composer install
  • 更新所有依賴
    composer update
  • 更新指定的包
    composer update monolog/monolog
  • 更新指定的多個(gè)包
    composer update monolog/monolog symfony/dependency-injection
  • 還可以通過通配符匹配包
    composer update monolog/monolog symfony/*

web-msg-sender 安裝及使用

  1. 因?yàn)槲业捻?xiàng)目是moodle系統(tǒng)的二次開發(fā),可能和小伙伴們有些不同 但原理基本一直
前端代碼

附帶上socketio官方地址
local/localname/amd/**.js

 // 本工程基于AMD模范開發(fā) 
  define(['jquery', 'core/ajax','local_wxpay/socketio'], function($, ajax,io) {
   socket = io('http://localhost:2120',{'reconnect':true,'auto connect':true,'force new 
 connection':true});  // 創(chuàng)建
 //reconnect ::  開啟重新連接  **非常重要
 //force new connection  ::強(qiáng)制新連接
 //auto connect ::自動(dòng)連接
 socket.connect();// 開始鏈接
 // 我這里用到了以下這幾個(gè)api
 socket.on('disconnect',function() {
       console.log('斷開連接');
     });
 }
 socket.on('connect', function(){
       socket.emit('login', 1665);
      //      login :鏈接字段
      //      1665: 鏈接id
 });
 socket.on('new_msg', function(msg){
  // 后端推送來消息時(shí)
  //  后端接收到相匹配的字段返回的數(shù)據(jù) 在這里操作邏輯
  ***····**
 }
// 后端推送來在線數(shù)據(jù)時(shí) 多少人在線
 socket.on('update_online_count', function(online_stat){
       console.log(online_stat);
});

// ****比較重要 *** 關(guān)閉時(shí)重新鏈接
 socket.disconnect();
 socket.on('reconnect', function(){
  console.log('重新連接');
 });
// 對(duì)于初初接觸者 可能對(duì)這個(gè)端口號(hào)比較敏感 我會(huì)在下文中詳細(xì)標(biāo)注
//'local_wxpay/socketio'  為引用外部socketio
//與<script src='//cdn.bootcss.com/socket.io/1.3.7/socket.io.js'></script> 一致
//可以打開//cdn.bootcss.com/socket.io/1.3.7/socket.io.js 這個(gè)鏈接 把代碼拷到本地
后端代碼

local/localname/utils/socketio.php
這里代碼就比較簡潔了 此方法是在微信的回調(diào)url的php文件中使用

<?php
function test($xmldata,$userid,$ip){
    $to_uid = $userid;
    $jsoninfo = json_encode([status=>true,res=>$xmldata]);
    // 推送的url地址,使用自己的服務(wù)器地址  模擬發(fā)送請(qǐng)求
    $push_api_url = "http://$ip:2121/";
    $post_data = array(
        "type" => "publish",
        "content" => $jsoninfo,
        "to" => $to_uid,
    );
    $ch = curl_init ();
    curl_setopt ( $ch, CURLOPT_URL, $push_api_url );
    curl_setopt ( $ch, CURLOPT_POST, 1 );
    curl_setopt ( $ch, CURLOPT_HEADER, 0 );
    curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, 1 );
    curl_setopt ( $ch, CURLOPT_POSTFIELDS, $post_data );
    curl_setopt ($ch, CURLOPT_HTTPHEADER, array("Expect:"));
    $return = curl_exec ( $ch );
    //    $json = json_decode($return);
    curl_close ( $ch );
    var_export($return);
}
// 可自行調(diào)用test函數(shù)進(jìn)行調(diào)試

端口問題

  • 服務(wù)端監(jiān)聽端口: 2123
  • 客戶端監(jiān)聽端口: 2120
  • 消息推送端口: 2121
大概就是這個(gè)樣子
啟用socketio服務(wù)

web-msg-sender-master\start_for_win.bat雙擊打開這個(gè)文件運(yùn)行項(xiàng)目
愉快的進(jìn)行測(cè)試吧~

如果覺得有幫助 請(qǐng)給小編一個(gè)star
你的star?、點(diǎn)贊和關(guān)注是我持續(xù)創(chuàng)作的動(dòng)力!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容