聊天室架构图

在这里插入图片描述
这个架构比较简单,关键点有如下几个:
1.主流服务只有API和Broker两个服务。
2. API和broker都是无状态服务。
优点:可以在客户端无感知情况下水平扩展。
对于broker服务,如果单点挂掉,那么客户端与服务端端口连接,重连到其他broker上。
缺点:无法使用本地内存缓存,只能使用分布式缓存。
无法保证消息严格有序
对于海量用户的聊天室无法实时统计在线人数,与统计单个用户是否在聊天室。
3. 高可用:
1)通过调度,可动态切换客户端连入不同运营商(移动、联通、电信)、每个运营商不同机房(北京联通、济阳联通)的比例。通过调度,可动态切换客户端连入不同运营商(移动、联通、电信)、每个运营商不同机房(北京联通、济阳联通)的比例。
2)消息广播:redis sub/pub为主,http作为备份。
3)通过推送消息的频率来限流。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Netty是一个高性能、异步事件驱动的网络应用框架,特别适合用来构建高并发的服务器,例如聊天室应用。在Netty聊天室中实现片发送,通常涉及以下几个步骤: 1. **像编码**:首先,你需要将片转换成字节流,常用的方法是使用像JPEG或PNG这样的片格式,并将其转换为字节数组。 2. **消息结构**:设计一个消息结构来封装片数据,可能包括消息头(如类型标识和长度)和片数据本身。 3. **Netty管道**:在Netty的`ChannelHandlerContext`中,你可以创建一个新的`ByteBuf`(内存中的字节缓冲区),并将片数据写入其中。 ```java ByteBuf byteBuf = Unpooled.buffer(); byteBuf.writeInt(imageType); // 片类型标识 byteBuf.writeInt(imageData.length); byteBuf.writeBytes(imageData); ``` 4. **组装和发送**:将`ByteBuf`添加到`Message`对象中,然后通过`Channel`发送给客户端。 ```java Message message = new Message(MessageType.IMAGE, byteBuf); channel.writeAndFlush(message); ``` 5. **接收处理**:客户端接收到消息后,从`ByteBuf`中读取数据并解码成原始片。 6. **显示片**:将解码后的片数据展示给用户,可能是在Web页面上显示,或者作为文件保存。 **相关问题--:** 1. Netty如何处理网络I/O操作? 2. 如何在Netty中实现数据序列化以发送复杂对象,如片? 3. 客户端如何在Netty架构下正确地解码接收到的片消息?

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值