<?php
use Workerman\Worker; require_once '../../web/Workerman/Autoloader.php';
require_once '../../web/Channel/src/Server.php';
require_once '../../web/Channel/src/Client.php'; $worker = new Worker('text://0.0.0.0:0623'); $channel = new Channel\Server('0.0.0.0', 8888); $worker->count = 3;
$worker->onWorkerStart = function ($worker)
{
\Channel\Client::connect('127.0.0.1', 8888);
\Channel\Client::on('broadcast', function($event_data)use($worker){
$event_data = json_decode($event_data);
if (!empty($event_data->work_id) && !empty($event_data->to_connect_id)) {
$worker_id = $event_data->work_id;
$to_connect_id = $event_data->to_connect_id;
if ($worker_id == $worker->id) {
foreach ($worker->connections as $connection) {
if ($connection->id == $to_connect_id) {
$connection->send($event_data->content);
}
}
}
} else {
foreach ($worker->connections as $connection) {
$connection->send($event_data['content']);
}
}
});
};
$worker->onConnect = function ($connection)use($worker)
{
echo '用户姐夫' . 'worker id ' . $worker->id . ',connection id ' . $connection->id . "上线\n";};$worker->onMessage = function ($connection, $data)use($worker){ echo '用户姐夫' . 'worker id ' . $worker->id . ',connection id ' . $connection->id . "上线\n"; $event_data['content'] = $data; $event_data['work_id'] = 2; $event_data['to_connect_id'] = 2;//这里模拟只向work进程id为2 connect id 为2 的tcp链接发送信息 $data_event = json_encode($event_data); Channel\Client::publish('broadcast', $data_event);};Worker::runAll();

workerman channel组件集群推送的更多相关文章

  1. work单进程群发通知 后面会增加Channel组件的分组推送以及集群推送篇章

    <?phpuse Workerman\Worker;use Workerman\Lib\Timer; require_once '../../web/Workerman/Autoloader.p ...

  2. Windows Phone开发(43):推送通知第一集——Toast推送

    原文:Windows Phone开发(43):推送通知第一集--Toast推送 好像有好几天没更新了,抱歉抱歉,最近"光荣"地失业,先是忙于寻找新去处,唉,暂时没有下文.而后又有一 ...

  3. Alibaba Nacos 服务发现组件集群部署

    前面学习了单机模式下的启动,生产环境中部署nacos肯定是使用集群模式cluster保证高可用. 官方文档的集群部署推荐使用VIP+域名模式,把所有服务列表放到一个vip下面,然后挂到一个域名下面. ...

  4. workerman Channel组件全局广播

    <?phpuse Workerman\Worker; require_once '../../web/Workerman/Autoloader.php';require_once '../../ ...

  5. Zookeeper的基本原理(zk架构、zk存储结构、watch机制、独立安装zk、集群间同步复制)

    1.Hbase集群的高可用性与伸缩性 HBase可以实现对Regionserver的监控,当个别Regionserver不可访问时,将其负责的分区分给其他Regionsever,其转移过程较快,因为只 ...

  6. socket.io简单入门(一.实现简单的图表推送)

    引子:随着nodejs蓬勃发展,虽然主要业务系统因为架构健壮性不会选择nodejs座位应用服务器.但是大量的内部系统却可以使用nodejs试水,大量的前端开发人员转入全堆开发也是一个因素. 研究本例主 ...

  7. hbase 学习(十三)集群间备份原理

    集群建备份,它是master/slaves结构式的备份,由master推送,这样更容易跟踪现在备份到哪里了,况且region server是都有自己的WAL 和HLog日志,它就像mysql的主从备份 ...

  8. 云原生时代, Kubernetes 多集群架构初探

    为什么我们需要多集群? 近年来,多集群架构已经成为“老生常谈”.我们喜欢高可用,喜欢异地多可用区,而多集群架构天生就具备了这样的能力.另一方面我们也希望通过多集群混合云来降低成本,利用到不同集群各自的 ...

  9. (转)苹果推送通知服务教程 Apple Push Notification Services Tutorial

    本文译自http://www.raywenderlich.com/.原文由iOS教程团队 Matthijs Hollemans 撰写,经原网站管理员授权本博翻译. 在iOS系统,考虑到手机电池电量,应 ...

随机推荐

  1. Echarts动态加载柱状图的实例

    一.引入echarts.js文件(下载页:http://echarts.baidu.com/download.html) 二.HTML代码: <div style="width: 10 ...

  2. .NET MVC同页面显示从不同数据库(mssql、mysql)的数据

    控制器: private readonly VipViewModel _model = new VipViewModel(); public static string Msg;// GET: Sys ...

  3. (转)开放window是服务器端口——以8080为例

    本文记录两个内容: 1.win7下打开端口 2.服务器(2003或者其他老版的系统以2003为例) 测试端口时 可用telnet 命令 侦听端口:C:\Documents and Settings\a ...

  4. [UGUI]图文混排(四):插入图片

    参考链接: http://www.cnblogs.com/leoin2012/p/7162099.html 0.图片标签和图片类 标签格式:<icon name=*** w=1 h=1 n=** ...

  5. uva-10714-贪心

    题意:有一条杆,长度为L,上面很几只蚂蚁,蚂蚁的朝向未知,爬速1cm/s,在爬行过程中,蚂蚁相撞了就往反方向爬,问,杆上没有蚂蚁至少要多久,至多要多久 解题思路: 蚂蚁1和蚂蚁2相撞,我们只要交换一下 ...

  6. JAVA获取文件夹下所有的文件

    package com.test; import org.junit.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; im ...

  7. Linux设置DNS server

    查看: cat /etc/resolv.conf 修改: vim /etc/resolv.conf

  8. winform/timer控件/权限设置/三级联动

    一.timer控件 组件--timer timer是一个线程,默认可以跨线程访问对象 属性:Enabled--可用性 Interval--间隔时间 Tick:间隔时间发生事件 二.三级联动 例: pu ...

  9. 【JAVA】POI设置EXCEL单元格格式为文本、小数、百分比、货币、日期、科学计数法和中文大写

    POI设置EXCEL单元格格式为文本.小数.百分比.货币.日期.科学计数法和中文大写 博客分类:,本文内容转自 http://javacrazyer.iteye.com/blog/894850 FIL ...

  10. 白鹭引擎 - 资源文件的加载 ( RES, loadConfig, loadGroup )

    class Main extends egret.DisplayObjectContainer { public constructor() { super(); this.addEventListe ...