如何使用workerman進行消息推送

下面由workerman教程欄目給大家介紹使用workerman進行消息推送的方法,希望對需要的朋友有所幫助!

如何使用workerman進行消息推送

workerman教程是一款純PHP開發(fā)的開源高性能的PHP socket 服務(wù)器框架。被廣泛的用于手機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.batn"); } //?標記是全局啟動 define('GLOBAL_START',?1); //?加載IO?和?Web require_once?__DIR__?.?'/start_io.php'; 可以注釋掉?webServer?服務(wù)?沒什么用??省點資源 //?require_once?__DIR__?.?'/start_web.php'; //?運行所有服務(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ù)?并保持進程

推送類 我用的tp5

<?php namespace appindexmoudel;  /**  * 推送事件  * 典型調(diào)用方式:  * $push = new WebSocket();  * $push->setUser($user_id)-&gt;setContent($string)-&gt;push();//連貫操作 ?* ?*?Class?WebSocket ?*?@package?appindexmoudel;? ?*/ class?WebSocket { ????/** ?????*?@var?string?目標用戶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-&gt;to_user?=?$user???:?''; ????????return?$this; ????} ????/** ?????*?設(shè)置推送內(nèi)容 ?????* ?????*?@param?string?$content ?????*?@return?$this ?????*/ ????public?function?setContent($content?=?'') ????{ ????????$this-&gt;content?=?$content; ????????return?$this; ????} ????/** ?????*?推送 ?????*/ ????public?function?push() ????{ ????????$data?=?[ ????????????'type'?=&gt;?'publish', ????????????'content'?=&gt;?$this-&gt;content, ????????????'to'?=&gt;?$this-&gt;to_user, ????????]; ????????//?var_dump($data); ????????//?var_dump($this-&gt;push_api_url); ????????$ch?=?curl_init?(); ????????curl_setopt($ch,?CURLOPT_URL,?$this-&gt;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(&#39;uid&#39;,&#39;&#39;);//uid為空的時候推送給所有用戶         $string = &#39;這是一個推送的測試&#39;;         $string = input(&#39;msg&#39;) ? : $string;         $push = new WebSocket();         $push->setUser($uid)-&gt;setContent($string)-&gt;push(); ????} ????/** ?????*?推送目標頁 ?????* ?????*?@return?thinkresponseView ?????*/ ????public?function?targetPage(){ ????????return?view(); ????} }

推送目標的前端顯示

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

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

如何使用workerman進行消息推送

以上就是如何使用

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點贊10 分享