基于RabbitMQ的聊天消息功能设计

最近在做有关聊天功能,整体需求就是支持客户端,浏览器端进行多人在线的讨论组聊天。聊天内容支持文字,语音,图片。

设计思路为,使用RabbitMQ作为聊天支持服务,因为RabbitMQ的多语言SDK优势。

因为是多人讨论组形式的聊天,所以采用广播(fanout)方式,同一个讨论组中的人员都订阅相同的exchange。另外,为了监听讨论组内人员的在线情况,再定义一个广播方式的exchange用来广播心跳信息。

以上为消息服务的使用方法和思路,接下来介绍一下关于消息内容的实现思路。

消息内容采用json的方式进行传递,json中定义多个key,包括发送人,消息内容,消息类型等等。

文字类消息比较简单,直接将消息内容放在“消息内容”key对应的value上即可。

图片类消息,首先将图片转换为base64编码的字符串,然后将此字符串作为“消息内容”对应的value发出去。

语音类消息则要依赖apache流媒体服务了。首先各个聊天的C端(客户端和浏览器)采集音频,然后将音频发送到服务端存储到apache流媒体服务上,之后服务端将播放地址返回各个C端。各个C端把播放地址作为“消息内容”对应的value发出去。各个C端在收到消息后,依据播放地址,播放对应的音频。

在图片的采集上,支持用户手动选择文件进行发送,还支持截图,关于截图,推荐使用  牛牛截图(免费,稳定,多语言【http://www.ggniu.cn/】)。

关于音频的采集,浏览器端可以使用  recorder.js【https://github.com/jwagener-soundcloud/recorder.js】来进行音频采集,基于flash。如果是google,请使用google的多媒体支持,google浏览器本身对音频采集已经开放接口,开源实现方案较多。

关于客户端的音频采集,因为我们系统是基于wpf做的,所以推荐使用NAudio【https://github.com/naudio/NAudio】,采集和播放都有支持,稳定方便。

 

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值