V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
fFeeOps
V2EX  ›  程序员

IM 长链接网关 ID 求助

  •  
  •   fFeeOps · 130 天前 · 977 次点击
    这是一个创建于 130 天前的主题,其中的信息可能已经有所发展或是发生改变。

    背景

    有一个 Netty 为基础的 IM 长链接网关,下面有种 channelId 的生成方式,但是楼主不太确定是否能在分布式高并发环境下保证 id 唯一性,请教一下各位大佬。

    1. 有没有必要自定义 channelId ,还是直接用 Netty 的 id
    2. 能不能保证唯一性,不能的话怎么优化一下?

    代码

        public static String generateChannelId(InetSocketAddress remoteAddr, long timestamp) {
            // 初始化一个容量为 96 的 StringBuilder 对象
            StringBuilder sb = new StringBuilder(96);
            // 添加本地 IP 地址
            sb.append(NetUtil.LOCAL_IP_ADDR);
            // 添加分隔符
            sb.append(CH_ID_SEPARATOR);
            // 获取并添加远程 IP 地址
            sb.append(remoteAddr.getAddress().getHostAddress());
            // 添加分隔符
            sb.append(CH_ID_SEPARATOR);
            // 获取并添加远程端口
            sb.append(remoteAddr.getPort());
            // 添加分隔符
            sb.append(CH_ID_SEPARATOR);
            // 添加时间戳
            sb.append(timestamp);
            // 添加分隔符
            sb.append(CH_ID_SEPARATOR);
            // 获取并添加当前序列号的十六进制字符串表示
            sb.append(Integer.toHexString(SEQ.getAndIncrement()));
            // 返回拼接好的字符串
            return sb.toString();
        }
    
    5 条回复    2024-08-09 16:01:25 +08:00
    v2orz
        1
    v2orz  
       130 天前
    ipv6 环境下,你这个 96 是不是不够用?

    默认情况 netty 应该用的 uuid ,如果不需要可读性,就用默认的就可以了
    coderxy
        2
    coderxy  
       130 天前
    基本可以认为就是全局唯一的
    sujin190
        3
    sujin190  
       130 天前
    这 ID 有啥用?平台唯一性区分那也是用户 ID 吧,如果允许多端登录那也是用户下再生成设备 ID 就是了,这个过程鉴权会话的时候就处理好了,不需要这边生成吧,否则默认的内存地址不挺好的么,本程序内肯定不冲突
    fFeeOps
        4
    fFeeOps  
    OP
       130 天前
    @v2orz #1 自建 id 就是想要考虑可读性~
    wkong
        5
    wkong  
       130 天前
    没必要自己开发了,我都为你开发好了 😄 https://github.com/WuKongIM/WuKongIM
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5781 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 01:55 · PVG 09:55 · LAX 17:55 · JFK 20:55
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.