最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题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关键字专题关键字专题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
当前位置: 首页 - 科技 - 知识百科 - 正文

如何使用workerman进行消息推送

来源:懂视网 责编:小采 时间:2020-11-03 18:20:13
文档

如何使用workerman进行消息推送

如何使用workerman进行消息推送:下面由workerman教程栏目给大家介绍使用workerman进行消息推送的方法,希望对需要的朋友有所帮助!Workerman是一款纯PHP开发的开源高性能的PHP socket 服务器框架。被广泛的用于手机app、移动通讯,微信小程序,手游服务端、网络游戏、PHP聊天室、硬件通讯
推荐度:
导读如何使用workerman进行消息推送:下面由workerman教程栏目给大家介绍使用workerman进行消息推送的方法,希望对需要的朋友有所帮助!Workerman是一款纯PHP开发的开源高性能的PHP socket 服务器框架。被广泛的用于手机app、移动通讯,微信小程序,手游服务端、网络游戏、PHP聊天室、硬件通讯
下面由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 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
");
}
// 标记是全局启动
define('GLOBAL_START', 1);
// 加载IO 和 Web
require_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

<?php
namespace appindexmoudel; 
/**
 * 推送事件
 * 典型调用方式:
 * $push = new WebSocket();
 * $push->setUser($user_id)->setContent($string)->push();//连贯操作
 *
 * Class WebSocket
 * @package appindexmoudel; 
 */
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);
 }
}

操作控制器

<?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();
 }
 /**
 * 推送目标页
 *
 * @return 	hink
esponseView
 */
 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=123
ok 为推送成功
offline 为未在线
fail 为失败

前端成功展示 321为我自定义的uid

b245264dfc0f8841b420a5cb88170e7.png

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文档

如何使用workerman进行消息推送

如何使用workerman进行消息推送:下面由workerman教程栏目给大家介绍使用workerman进行消息推送的方法,希望对需要的朋友有所帮助!Workerman是一款纯PHP开发的开源高性能的PHP socket 服务器框架。被广泛的用于手机app、移动通讯,微信小程序,手游服务端、网络游戏、PHP聊天室、硬件通讯
推荐度:
标签: 消息 如何 怎么
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top