Redis支持这样一种特性,你可以将数据推到某个信息管道中,然后其它客户端可以通过订阅这些管道来获取推送过来的信息。使用Redis的Pub/Sub,接收方在某个channel注册为一个订阅者,然后监听这个channel,一旦有消息发到这个channel上则自动接收消息, 利用这个特性可以轻易的实现消息推送功能。

  1. 使用Rediscli测试

  客户端A订阅通道:

redis 127.0.0.1:> SUBSCRIBE channeltest

  客户端B往该通道发送消息:

redis 127.0.0.1:> PUBLISH channeltest hello
(integer)
redis 127.0.0.1:> PUBLISH channeltest world
(integer)

  然后客户端A就能获取到推送的信息

redis 127.0.0.1:> SUBSCRIBE channeltest
Reading messages... (press Ctrl-C to quit)
) "subscribe"
) "channeltest"
) (integer)
) "message"
) "channeltest"
) "hello"
) "message"
) "channeltest"
) "world"

  2. 批量订阅测试

  客户端A订阅通道:

redis 127.0.0.1:> SUBSCRIBE channeltest*

  客户端B往该通道发送消息:

redis 127.0.0.1:6379> PUBLISH channeltest1 hello
(integer) 1
redis 127.0.0.1:6379> PUBLISH channeltest2 world
(integer)

  然后客户端A就能获取到推送的信息:

redis 127.0.0.1:> PSUBSCRIBE channeltest*
Reading messages... (press Ctrl-C to quit)
) "psubscribe"
) "channeltest*"
) (integer)
) "pmessage"
) "channeltest*"
) "channeltest1"
) "hello"
) "pmessage"
) "channeltest*"
) "channeltest2"
) "world"

  3. C#客户端实现

  客户端使用TeamDev.Redis

class Program
{
static void Main(string[] args)
{
try
{
RedisDataAccessProvider redisDataAccessProvider = new RedisDataAccessProvider();
redisDataAccessProvider = new RedisDataAccessProvider();
redisDataAccessProvider.Configuration.Host = "192.168.1.10";
redisDataAccessProvider.Configuration.Port = ;
redisDataAccessProvider.Connect(); redisDataAccessProvider.ChannelSubscribed += new ChannelSubscribedHandler(redisDataAccessProvider_ChannelSubscribed);
redisDataAccessProvider.MessageReceived += new MessageReceivedHandler(redisDataAccessProvider_MessageReceived);
redisDataAccessProvider.Messaging.Subscribe("al");
redisDataAccessProvider.Messaging.Subscribe("b1");
}
catch (Exception e)
{
Console.WriteLine("连接Redis错误:" + e.Message);
} Console.ReadLine();
} static void redisDataAccessProvider_MessageReceived(string channelname, string message)
{
if (channelname == "a1")
{
Console.WriteLine(message);
Console.ReadKey();
}
} static void redisDataAccessProvider_ChannelSubscribed(string channelname)
{
Console.WriteLine(channelname);
}
}

使用redis进行消息推送的更多相关文章

  1. php+redis 学习 五 消息推送

    <?php header('content-type:text/html;chaeset=utf-8'); /** * redis实战 * * 发布 * * @example php publi ...

  2. C# BS消息推送 SignalR Hubs环境搭建与开发(二)

    1. 前言 本文是根据网上前人的总结得出的. 环境: SignalR2.x,VS2015,Win10 2. 开始开发 1)新建一个MVC项目,叫做SignalRDemo 2)安装SignalR包 In ...

  3. MPush开源消息推送系统:简洁、安全、支持集群

    引言由于之前自己团队需要一个消息推送系统来替换JPUSH,一直找了很久基本没有真正可用的开源系统所有就直接造了个轮子,造轮子的时候就奔着开源做打算的,只是后来创业项目失败一直没时间整理这一套代码,最近 ...

  4. 异步tcp通信——APM.Server 消息推送服务的实现

    消息推送服务 服务器推送目前流行就是私信.发布/订阅等模式,基本上都是基于会话映射,消息对列等技术实现的:高性能.分布式可以如下解决:会话映射可采用redis cluster等技术实现,消息对列可使用 ...

  5. SSE(Server-sent events)技术在web端消息推送和实时聊天中的使用

    最近在公司闲着没事研究了几天,终于搞定了SSE从理论到实际应用,中间还是有一些坑的. 1.SSE简介 SSE(Server-sent events)翻译过来为:服务器发送事件.是基于http协议,和W ...

  6. 开源实时消息推送系统 MPush

    系统介绍 mpush,是一款开源的实时消息推送系统,采用java语言开发,服务端采用模块化设计,具有协议简洁,传输安全,接口流畅,实时高效,扩展性强,可配置化,部署方便,监控完善等特点.同时也是少有的 ...

  7. 使用swoole进行消息推送通知,配合vb.net进行客户端开发一样爽[开发篇]

    在以前的项目中,就曾听说过swoole的大名,想用来进行消息推送,但是当时只是有了初步的了解,并不敢大胆的运用到线上产品.所谓 识不足则多虑,威不足则多怒.所以就是怕,只能跟领导说了运用极光的推送功能 ...

  8. python 全栈开发,Day131(向app推送消息,玩具端消息推送)

    先下载github代码,下面的操作,都是基于这个版本来的! https://github.com/987334176/Intelligent_toy/archive/v1.4.zip 注意:由于涉及到 ...

  9. 用 centrifugo 搭建 消息推送服务器 docker + rancher 搭建

    关于消息推送服务器 目前有很多第三方的开放成熟的推送服务.鉴于项目需要 我们项目需要自己搭建 自己的推送服务. 我们的推送应用场景 聊天消息 项目内部消息提醒 移动设备接受消息 应用到的相关软件工具知 ...

随机推荐

  1. android 6.0添加权限

        @Override    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissio ...

  2. 理解 OpenStack 高可用(HA) (4): Pacemaker 和 OpenStack Resource Agent (RA)

    本系列会分析OpenStack 的高可用性(HA)概念和解决方案: (1)OpenStack 高可用方案概述 (2)Neutron L3 Agent HA - VRRP (虚拟路由冗余协议) (3)N ...

  3. Virtual Box和Linux的网络配置盲记

    近来可能在虚拟机重装了Linux的缘故,在用yum安装软件时出现错误,在提示上连接镜像网站时,都是"linux counldn't resolve host"这样的提示.我估计是l ...

  4. Tourist.js – 简单灵活的操作指南和导航插件

    Tourist.js 是一个基于 Backbone 和 jQuery 开发的轻量库,帮助你在应用程序创建简单易用的操作指南和导航功能.相比网站,它更适合用于复杂的,单页网站类型的应用程序.Touris ...

  5. 高性能javascript学习笔记系列(3) -DOM编程

    参考 高性能javascript 文档对象模型(DOM)是独立于语言的,用于操作XML和HTML文档的程序接口API,在浏览器中主要通过DOM提供的API与HTML进行交互,浏览器通常会把DOM和ja ...

  6. 定制Eclipse IDE之功能篇(二)

    上文回顾:定制Eclipse IDE之功能篇(一)   这一篇文章将记录一些Eclipse插件小功能,Smart but Useful.   一.设置工作空间 文本文件的编码   解决办法: 在org ...

  7. VSS 请求程序和 SharePoint 2013

    Windows Server 中的 VSS 可用于创建可备份和还原 Microsoft SharePoint Foundation 的应用程序.VSS 提供了一个基础结构,使第三方存储管理程序.业务程 ...

  8. c# 嵌入资源文件

    欢迎转载,转载请注明:转载自[ http://www.cnblogs.com/zjfree/ ] 开发环境:VS2005 C# 首先将要嵌入的资源拷贝到工程目录下. 设置文件生成操作为:嵌入的资源 获 ...

  9. assign,copy,strong,weak,nonatomic的理解

    举个例子: NSString *houseOfMM = [[NSString alloc] initWithString:'MM的三室两厅']; 上面一段代码会执行以下两个动作:  1 在堆上分配一段 ...

  10. 腾讯bugly团队提供的android国内镜像

    腾讯bugly团队提供的国内镜像   如果使用Android SDK Manager下载比较慢或者打不开,可以使用国内镜像 使用说明 http://android-mirror.bugly.qq.co ...