worker服务器推送消息,关于Worker如何向指定Client推送消息
use Workerman\Worker;
require_once './Workerman/Autoloader.php';
// 初始化一个worker容器,监听1234端口
$worker = new Worker('websocket://workerman.net:1234');
// 进程数设置为1
$worker->count = 1;
// 新增加一个属性,用来保存uid到connection的映射
$worker->uidConnections = array();
// 当有客户端发来消息时执行的回调函数
$worker->onMessage = function($connection, $data)use($worker)
{
// 判断当前客户端是否已经验证,既是否设置了uid
if(!isset($connection->uid))
{
// 没验证的话把第一个包当做uid(这里为了方便演示,没做真正的验证)
$connection->uid = $data;
/* 保存uid到connection的映射,这样可以方便的通过uid查找connection,
* 实现针对特定uid推送数据
*/
$worker->uidConnections = $connection;
return $connection->send('login success, your uid is ' . $connection->uid);
}
// 其它罗辑,针对某个uid发送 或者 全局广播
// 假设消息格式为 uid:message 时是对 uid 发送 message
// uid 为 all 时是全局广播
list($recv_uid, $message) = explode(':', $data);
// 全局广播
if($recv_uid == 'all')
{
broadcast($message);
}
// 给特定uid发送
else
{
sendMessageByUid($recv_uid, $message);
}
};
// 当有客户端连接断开时
$worker->onClose = function($connection)use($worker)
{
global $worker;
if(isset($connection->uid))
{
// 连接断开时删除映射
unset($worker->uidConnections);
}
};
// 向所有验证的用户推送数据
function broadcast($message)
{
global $worker;
foreach($worker->uidConnections as $connection)
{
$connection->send($message);
}
}
// 针对uid推送数据
function sendMessageByUid($uid, $message)
{
global $worker;
if(isset($worker->uidConnections))
{
$connection = $worker->uidConnections;
$connection->send($message);
}
}
// 运行所有的worker(其实当前只定义了一个)
Worker::runAll();
可以针对uid推送了,虽然是单进程,但是支持个1W在线是没问题的
worker服务器推送消息,关于Worker如何向指定Client推送消息相关推荐
- python微信定时发消息_python实现给微信指定好友定时发送消息
微信如何在设定时间自动发送信息给指定好友 微信没有定时发送信息的功能,但是可以借助小程序. 世界上最遥远的距离,不是生与死,而是小编就站在你面前,你却不知道小编爱你. 打开微信之后在搜索小程序中输入蜗 ...
- python定时发送微信消息_python实现给微信指定好友定时发送消息
python有很多有趣的库,其中wxpy是连接微信的接口,具体可以查看官方文档.可以实现自动操作,wxpy 支持 Python 3.4-3.6,以及 2.7 版本. 一.安装 win10环境,直接在c ...
- worker服务器推送消息,浏览器中serviceWorker用法
朋也的博客 » 首页 » 文章 浏览器中serviceWorker用法 作者:朋也 日期:2019-05-27 类别:javascript学习笔记 版权声明:自由转载-非商用-非衍生-保持署名(创意共 ...
- android推送如何推送不在线设备,推送系统从0到1(四):消息如何到达用户设备...
本篇主要为大家揭秘推送消息是如何传输的,如何到达用户设备上的,在不同的设备上会如何展示. 在上一篇文章中,我们可以知道在建立推送任务的过程中,需要考虑带有自滤功能的用户池构建.筛选有效用户.设置推送内 ...
- 企业微信推送消息延迟_一种基于企业微信的消息推送方法与流程
本发明涉及消息推送技术领域,特别涉及一种基于企业微信的消息推送方法. 背景技术: 随着微信公众号的普及,微信企业号也越来越受到人们的关注.而腾讯公司在微信企业号的基础上又进行了进一步的升级,提供了类似 ...
- php实现微信小程序推送,实现微信小程序模板消息不受限制、无限主动推送
需求背景 基于微信的通知渠道,微信小程序为开发者提供了可以高效触达用户的模板消息能力,在用户本人与小程序页面有交互行为后触发,通过微信聊天列表中的服务通知可快捷进入查看消息,点击查看详情还能跳转到下发 ...
- Android中集成Jpush实现推送消息通知与根据别名指定推送附示例代码下载
场景 经常会有后台服务向Android推送消息通知的情况. 实现 首先在Android Studio中新建一个Android应用 在Project根目录的build.gradle中配置了jcenter ...
- 微信消息推送神器【一封传话】介绍,让消息推送更简单
背景 对于很多个人开发和企业级别的软件开发来说,经常会遇到一些消息推送的场景.如设备报警消息推送.每日天气预报和大盘资讯简报推送等,例如微信公众号消息推送.钉钉消息推送等. 这里以微信消息推送举例,原 ...
- 5+App使用UniPush发送消息,App在线、离线均能收到消息推送,并在通知栏进行提醒,苹果、华为、小米手机均测试通过
[1]本文档中使用的全是逶传消息,没有使用个推的其他消息 [2]需要开通UniPush功能,并在华为.小米开发者中添加App,并开通Push权限,目前不需要上架各厂商应用市场就可以使用,后续不知道需要 ...
最新文章
- effective c++ 学习
- POJ 2785 4 Values whose Sum is 0
- 重启docker 服务命令
- 通过这个方法竟然可以看到声音传播的速度!?
- 基于OGG Datahub插件将Oracle数据同步上云
- http之SessionCookie
- PHP+MySql+PDO实现简单增加、删除、修改、查询
- Dell R410 BIOS 升级方法
- 网页php如何判断登录手机串号_php判断是否是手机登陆
- GitHub桌面版汉化
- STM32 复位电路设计
- 上传压缩包文件到Minio服务器遇到 java.io.EOFException: Truncated ZIP entry 异常
- linux学习资料(转帖收藏)
- web前端之过滤器的作用
- PCM与DSD究竟是什么??
- null underfined NaN 判断
- java 单体测试_单体测试指南
- PC端浏览器兼容性问题解决方案
- 卡巴斯基:2019Q3拒绝服务攻击趋势报告
- 服务器主板性能检测,服务器的主板性能指标
热门文章
- Improving Multi-hop Question Answering over Knowledge Graphs usingKnowledge Base Embeddings
- windows 11文件夹共享踩坑记录
- [技术] 使用Shader Graph着色器视图制作交互式顶点特效
- python的错误 File E:/Python 的代码大大/文件的读写操作.py, line 1 SyntaxError: Non-UTF-8 code starting with '\xcf
- 4284A安捷伦Agilent4284A精密lcr表
- 欢迎光临寒舍!!!本blog 正在筹建中~~~~~
- Minikube vs. kind vs. k3s vs k3d vs MicroK8s
- 折半查找判定树——(快速判断某棵树是否为折半查找判定树)
- 蓝桥杯算法训练合集四 1.p0802 2.A的B的C次方次方 3.出现次数最多的整数 4.成绩分级 5.台阶问题
- Firefox浏览器——除了IE我们还有选择(转)