web-msg-sender地址(windows)
這個(gè)邏輯包來自與我對(duì)php的websocket了解 由于原聲寫websocket 更何況我是一個(gè)小白 還需要一個(gè)段時(shí)間不能完成的需求(php websocket 主動(dòng)推送 還有 php7.3 多線程原因)
主要應(yīng)用 : 微信支付完成推送前端數(shù)據(jù)
- 我為什么不去谷狗 ?
集中答案如下
- 開啟多線程模式
很簡單 看不懂 太高深 短時(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)
- 下載安裝腳本 - composer-setup.php - 到當(dāng)前目錄:
php -r "copy('https://install.phpcomposer.com/installer', 'composer-setup.php');" - 執(zhí)行安裝過程 :
php composer-setup.php - 刪除安裝腳本 :
php -r "unlink('composer-setup.php');"
局部安裝
上述下載 Composer 的過程正確執(zhí)行完畢后,可以將 composer.phar 文件復(fù)制到任意目錄(比如項(xiàng)目根目錄下),然后通過 php composer.phar 指令即可使用 Composer 了!
全局安裝
- 找到并進(jìn)入 PHP 的安裝目錄(和你在命令行中執(zhí)行的 php 指令應(yīng)該是同一套 PHP)。
- 將 composer.phar 復(fù)制到 PHP 的安裝目錄下面,也就是和 php.exe 在同一級(jí)目錄。
- 在 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 安裝及使用
- 因?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)力!