首页 新闻 会员 周边 捐助

.net 环境下使用redis 发布订阅(疑问)

1
悬赏园豆:15 [待解决问题]

   最近在研究redis发布订阅这块,对redis也不是很熟悉,现在我要实现一个功能就是后台发布一则消息,另一个网页通过订阅获取这个消息出来,在web页面显示出来,注意:不是控制台哦。我奇怪的是控制台可以实现,为是么web上面显示不出来?我就随便弄了一个aspx或是cshtml都不行,哪位熟悉redis的大大能来解答下吗?不剩感激,哦,对了,还有redis 可以publish中文信息吗,发布的中文信息是不是会经过编码?

hslgmq的主页 hslgmq | 初学一级 | 园豆:29
提问于:2017-11-29 13:43
< >
分享
所有回答(4)
0

这与redis无关,这可以用WebSocket解决,.net中对应的实现有SignalR,详见 Introduction to SignalR

dudu | 园豆:29817 (高人七级) | 2017-11-29 13:50

谢谢,我知道websocket,但是我想知道的是redis是不是也能实现这种消息推送的功能,在网页上面(向我说的这种做法)

支持(0) 反对(0) hslgmq | 园豆:29 (初学一级) | 2017-11-29 13:53

@hslgmq: redis中的“消息”是指消息队列中的消息,消息队列有2种模式:发布者订阅者模式与生产者消费者模式,没有推送模式,详见 Redis 做消息队列

支持(0) 反对(0) dudu | 园豆:29817 (高人七级) | 2017-11-29 14:11
3

对于缓存而言,无所谓编码,你只需要保证你进去的时候是什么encoding,出来的时候使用相同encoding读就可以了。

redis中的mq功能很简单,你如果想实现推送其实自己封一下原生接口自己轮询pop就好了。

Daniel Cai | 园豆:10424 (专家六级) | 2017-11-29 15:05
0

这个队列通常用于内网服务之间。即使客户端极端点都用符合标准的mq,如activemq,rabbitmq,msmq...并且可以集成认证等。

并且这些mq的协议都往往不是基于http的(当然实际通信层都会做抽象,udp、tcp、pipe等),意味着网页是无法使用的(除非activex)。

如果你是服务器来通讯的,那么这个就失去了意义 —— 服务器端随便刷刷都可以实现。

也许你混淆了些东西,比如控制台打印int,Write实现了int的ToString的调用(app默认都是使用utf8),但是你弄到html里面肯定存在问题了,首先(html 是基于字符的编码,协议包不同部分的规定不一样)要基本的字符编码,然后需要html编码。即使你使用的是字符编码,html doc本身还有约定,比如doc head的说明和doc的编码一致性等等。

花飘水流兮 | 园豆:13617 (专家六级) | 2017-11-29 21:14
0

LZ想问的应该是 页面和服务器 双向通信的问题。这个和Redis倒没什么关系。Redis订阅通知到 服务器这个没问题。但是如何从服务器主动把消息通知到web页面上?
一种是利用websocket技术来实现,这个需要浏览器版本支持
另一种简单点,web页面 通过ajax 不停的轮询,从服务器拉取最新的消息。
推荐使用 .net signalR 组件,智能支持上面2种方案

gt1987 | 园豆:1150 (小虾三级) | 2019-11-04 10:11
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册