您好,欢迎访问一九零五行业门户网

如何使用workerman进行消息推送

下面由workerman教程栏目给大家介绍使用workerman进行消息推送的方法,希望对需要的朋友有所帮助!
workerman是一款纯php开发的开源高性能的php socket 服务器框架。被广泛的用于手机app、移动通讯,微信小程序,手游服务端、网络游戏、php聊天室、硬件通讯、智能家居、车联网、物联网等领域的开发。 
支持tcp长连接,支持websocket、http等协议,支持自定义协议。拥有异步mysql、异步redis、异步http、异步消息队列等众多高性能组件。与之类似的还有swoole,meepops。
首先下载workerman的web消息推送系统 web-msg-sender。
# wget http://www.workerman.net/download/senderzip# unzip senderzip#cd web-msg-sender #vim start.php
use workerman\worker;// 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\n");}// 标记是全局启动define('global_start', 1);// 加载io 和 webrequire_once __dir__ . '/start_io.php';可以注释掉 webserver 服务 没什么用 省点资源// require_once __dir__ . '/start_web.php';// 运行所有服务worker::runall();
保存
#vim start_io.php找到 将端口改成你要监听的端口 我是2120 记住要在安全组里入方向添加白名单// phpsocketio服务 $sender_io = new socketio(2120);服务端设置完毕后#php start.php start -d //开启服务 并保持进程
推送类 我用的tp5
<?phpnamespace app\index\moudel; /** * 推送事件 * 典型调用方式: * $push = new websocket(); * $push->setuser($user_id)->setcontent($string)->push();//连贯操作 * * class websocket * @package app\index\moudel; */class websocket{ /** * @var string 目标用户id */ protected $to_user = ''; /** * @var string 推送服务地址 */ protected $push_api_url = 'http://127.0.0.1:2000'; /** * @var string 推送内容 */ protected $content = ''; /** * 设置推送用户,若参数留空则推送到所有在线用户 * * @param string $user * @return $this */ public function setuser($user = '') { $this->to_user = $user ? : ''; return $this; } /** * 设置推送内容 * * @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); }}
操作控制器
<?phpnamespace app\index\controller;use think\controller;use app\index\moudel\websocket;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(); } /** * 推送目标页 * * @return \think\response\view */ public function targetpage(){ return view(); }}
推送目标的前端显示
<!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 ($) { // 连接服务端 var socket = io('http://39.106.132.216:2000/'); //这里当然填写真实的地址了 // uid可以是自己网站的用户id,以便针对uid推送以及统计在线人数,但一定是唯一标识 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>'); }); // 后端推送来在线数据时 socket.on('update_online_count', function (online_stat) { console.log(online_stat); $('#count').html(online_stat); }); })</script>
http://我自己的域名/index/index/pushastring?uid=123ok 为推送成功offline 为未在线fail 为失败
前端成功展示 321为我自定义的uid
以上就是如何使用workerman进行消息推送的详细内容。
其它类似信息

推荐信息