gpt4 book ai didi

java - 如何为每条通过netty消息解码器的消息分配一个序列号?

转载 作者:行者123 更新时间:2023-12-02 11:54:28 26 4
gpt4 key购买 nike

我正在开发一个 netty channel 处理程序/解码器,它为到达处理程序的每条消息分配一个唯一的序列号。

我当前的方法定义了一个包含 AtomicLong 的属性作为计数器,每当消息到达时,它就会加一并分配给解码后的消息:

@Override
protected void decode(ChannelHandlerContext ctx, TextWebSocketFrame frame, List<Object> out) {
AttributeKey<AtomicLong> sequenceKey = AttributeKey.valueOf("message_sequence");
AtomicLong sequence = ctx.channel().attr(sequenceKey).get();
long curerntMessageId = sequence.incrementAndGet();

Message message = decode(frame);
message.setMessageId(curerntMessageId);

随后,在消息编码器中,消息 id 被传输到响应消息,从而通过唯一的 id 连接请求和响应。

采用这种方法的原因是,在 Web 套接字连接的上下文中,我需要一些机制来识别请求<->响应周期。

我想知道这种方法是否有意义,因为我必须始终访问 channel 属性,或者是否已经存在我可能不知道的现有解决方案?

最佳答案

如果这只需要每个连接都是唯一的,您可以直接在解码器本身中存储一个 int/long 并递增它。这是因为一切都是单线程的。因此,如果我正确理解您的用例,则根本不需要使用属性和原子

关于java - 如何为每条通过netty消息解码器的消息分配一个序列号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47697419/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com