系列文章目录
授权登录
定义登录协议

为了方便演示,我们简单的定义一下登录协议,协议的body就是用户的ID。
用户与channel绑定
存储用户ID和channel的对应关系
ConcurrentHashMap<String, Channel> channelMap = new ConcurrentHashMap<>();
定义一个map实现用户ID和channel的绑定关系。这样通过用户的ID可以直接找到channel
存储channel和用户ID的对应关系
AttributeKey<String> key = AttributeKey.valueOf("user");
channel.attr(key).set(userId);
使用netty提供的Attribute实现channel和用户ID的绑定。
关键代码展示
X.java
import io.netty.channel.Channel;
import io.netty.util.AttributeKey;
import java.util.concurrent.ConcurrentHashMap;
/**
* @author Mr.Guo
* @date 2021/3/9 下午4:15
*/
public class X {
public static final ConcurrentHashMap<String, Channel> channelMap = new ConcurrentHashMap<>();
/**
* 判断一个通道是否有用户在使用
* 可做信息转发时判断该通道是否合法
*
* @param channel
* @return
*/
public static boolean hasUser(Channel channel) {
AttributeKey<String> key = AttributeKey.valueOf("user");
//netty移除了这个map的remove方法,这里的判断谨慎一点
return

本文介绍了如何构建一个简单的即时通讯(IM)系统,包括技术选型、用户登录协议定义、用户与channel的绑定、心跳检测和通过Redis实现服务集群。重点讲解了使用Netty进行channel管理和用户状态跟踪,并提供了关键代码示例。
最低0.47元/天 解锁文章
6268





