最新文章專題視頻專題問答1問答10問答100問答1000問答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
當(dāng)前位置: 首頁 - 科技 - 知識百科 - 正文

如何使用workerman進(jìn)行消息推送

來源:懂視網(wǎng) 責(zé)編:小采 時間:2020-11-03 18:20:13
文檔

如何使用workerman進(jìn)行消息推送

如何使用workerman進(jìn)行消息推送:下面由workerman教程欄目給大家介紹使用workerman進(jìn)行消息推送的方法,希望對需要的朋友有所幫助!Workerman是一款純PHP開發(fā)的開源高性能的PHP socket 服務(wù)器框架。被廣泛的用于手機(jī)app、移動通訊,微信小程序,手游服務(wù)端、網(wǎng)絡(luò)游戲、PHP聊天室、硬件通訊
推薦度:
導(dǎo)讀如何使用workerman進(jìn)行消息推送:下面由workerman教程欄目給大家介紹使用workerman進(jìn)行消息推送的方法,希望對需要的朋友有所幫助!Workerman是一款純PHP開發(fā)的開源高性能的PHP socket 服務(wù)器框架。被廣泛的用于手機(jī)app、移動通訊,微信小程序,手游服務(wù)端、網(wǎng)絡(luò)游戲、PHP聊天室、硬件通訊
下面由workerman教程欄目給大家介紹使用workerman進(jìn)行消息推送的方法,希望對需要的朋友有所幫助!

Workerman是一款純PHP開發(fā)的開源高性能的PHP socket 服務(wù)器框架。被廣泛的用于手機(jī)app、移動通訊,微信小程序,手游服務(wù)端、網(wǎng)絡(luò)游戲、PHP聊天室、硬件通訊、智能家居、車聯(lián)網(wǎng)、物聯(lián)網(wǎng)等領(lǐng)域的開發(fā)。

支持TCP長連接,支持Websocket、HTTP等協(xié)議,支持自定義協(xié)議。擁有異步Mysql、異步Redis、異步Http、異步消息隊列等眾多高性能組件。與之類似的還有swoole,MeepoPS。

首先下載workerman的Web消息推送系統(tǒng) web-msg-sender。

# wget http://www.workerman.net/download/senderzip
# unzip senderzip
#cd web-msg-sender 
#vim start.php
use WorkermanWorker;
// composer 的 autoload 文件
include __DIR__ . '/vendor/autoload.php';
if(strpos(strtolower(PHP_OS), 'win') === 0)
{
 exit("start.php not support windows, please use start_for_win.bat
");
}
// 標(biāo)記是全局啟動
define('GLOBAL_START', 1);
// 加載IO 和 Web
require_once __DIR__ . '/start_io.php';
可以注釋掉 webServer 服務(wù) 沒什么用 省點資源
// require_once __DIR__ . '/start_web.php';
// 運(yùn)行所有服務(wù)
Worker::runAll();

保存

#vim start_io.php
找到 將端口改成你要監(jiān)聽的端口 我是2120 記住要在安全組里入方向添加白名單
// PHPSocketIO服務(wù) 
$sender_io = new SocketIO(2120);
服務(wù)端設(shè)置完畢后
#php start.php start -d //開啟服務(wù) 并保持進(jìn)程

推送類 我用的tp5

<?php
namespace appindexmoudel; 
/**
 * 推送事件
 * 典型調(diào)用方式:
 * $push = new WebSocket();
 * $push->setUser($user_id)->setContent($string)->push();//連貫操作
 *
 * Class WebSocket
 * @package appindexmoudel; 
 */
class WebSocket
{
 /**
 * @var string 目標(biāo)用戶id
 */
 protected $to_user = '';
 /**
 * @var string 推送服務(wù)地址 
 */
 protected $push_api_url = 'http://127.0.0.1:2000';
 /**
 * @var string 推送內(nèi)容
 */
 protected $content = '';
 /**
 * 設(shè)置推送用戶,若參數(shù)留空則推送到所有在線用戶
 *
 * @param string $user
 * @return $this
 */
 public function setUser($user = '')
 {
 $this->to_user = $user ? : '';
 return $this;
 }
 /**
 * 設(shè)置推送內(nèi)容
 *
 * @param string $content
 * @return $this
 */
 public function setContent($content = '')
 {
 $this->content = $content;
 return $this;
 }
 /**
 * 推送
 */
 public function push()
 {
 $data = [
 'type' => 'publish',
 'content' => $this->content,
 'to' => $this->to_user,
 ];
 // var_dump($data);
 // var_dump($this->push_api_url);
 $ch = curl_init ();
 curl_setopt($ch, CURLOPT_URL, $this->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, $data);
 curl_setopt($ch, CURLOPT_HTTPHEADER, array('Expect:'));
 $res = curl_exec($ch);
 curl_close($ch);
 dump($res);
 }
}

操作控制器

<?php
namespace appindexcontroller;
use thinkController;
use appindexmoudelWebSocket;
class Index extends Controller
{
 /**
 * 推送一個字符串
 */
 public function push_msg(){
 $uid = input('uid','');//uid為空的時候推送給所有用戶
 $string = '這是一個推送的測試';
 $string = input('msg') ? : $string;
 $push = new WebSocket();
 $push->setUser($uid)->setContent($string)->push();
 }
 /**
 * 推送目標(biāo)頁
 *
 * @return 	hink
esponseView
 */
 public function targetPage(){
 return view();
 }
}

推送目標(biāo)的前端顯示

<!DOCTYPE html>
<html>
<head>
 <meta charset="UTF-8">
 <title>Title</title>
</head>
<body>
<strong id="count"></strong>
<h1 id="target"></h1>
</body>
</html>
<script src="http://cdn.bootcss.com/jquery/3.1.0/jquery.min.js"></script>
<script src='http://cdn.bootcss.com/socket.io/1.3.7/socket.io.js'></script>
<script>
 jQuery(function ($) {
 // 連接服務(wù)端
 var socket = io('http://39.106.132.216:2000/'); //這里當(dāng)然填寫真實的地址了
 // uid可以是自己網(wǎng)站的用戶id,以便針對uid推送以及統(tǒng)計在線人數(shù),但一定是唯一標(biāo)識
 uid = 321;
 // socket連接后以uid登錄
 socket.on('connect', function () {
 socket.emit('login', uid);
 });
 // 后端推送來消息時
 socket.on('new_msg', function (msg) {
 console.log("收到消息:" + msg);
 $('#target').append(msg).append('<br>');
 });
 // 后端推送來在線數(shù)據(jù)時
 socket.on('update_online_count', function (online_stat) {
 console.log(online_stat);
 $('#count').html(online_stat);
 });
 })
</script>
http://我自己的域名/index/index/pushAString?uid=123
ok 為推送成功
offline 為未在線
fail 為失敗

前端成功展示 321為我自定義的uid

b245264dfc0f8841b420a5cb88170e7.png

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

如何使用workerman進(jìn)行消息推送

如何使用workerman進(jìn)行消息推送:下面由workerman教程欄目給大家介紹使用workerman進(jìn)行消息推送的方法,希望對需要的朋友有所幫助!Workerman是一款純PHP開發(fā)的開源高性能的PHP socket 服務(wù)器框架。被廣泛的用于手機(jī)app、移動通訊,微信小程序,手游服務(wù)端、網(wǎng)絡(luò)游戲、PHP聊天室、硬件通訊
推薦度:
標(biāo)簽: 消息 如何 怎么
  • 熱門焦點

最新推薦

猜你喜歡

熱門推薦

專題
Top