Jakarta ee 关于核心netty和Protobuf的教程

Jakarta ee 关于核心netty和Protobuf的教程,jakarta-ee,netty,protocol-buffers,distributed-system,Jakarta Ee,Netty,Protocol Buffers,Distributed System,我正在从事分布式系统(Java/EE、netty、protobuf)的工作。我想知道如何将文档从客户端发送到服务器,并将其存储在服务器数据库中 发送字符串似乎很简单,但如何发送一个大文件呢。我是否需要将信息分成小块发送过来 任何关于如何使用文档的好教程。我假设您已经完成了netty的样板代码部分,您有一个正在运行的服务器,设置了协议缓冲区拦截器,并生成了与协议缓冲区相关的类。如果您需要这些步骤的帮助,请这样说,我将编辑并添加它们 首先,序列化大块数据(任何可能会影响堆的数据)对protobuf没

我正在从事分布式系统(Java/EE、netty、protobuf)的工作。我想知道如何将文档从客户端发送到服务器,并将其存储在服务器数据库中

发送字符串似乎很简单,但如何发送一个大文件呢。我是否需要将信息分成小块发送过来


任何关于如何使用文档的好教程。

我假设您已经完成了netty的样板代码部分,您有一个正在运行的服务器,设置了协议缓冲区拦截器,并生成了与协议缓冲区相关的类。如果您需要这些步骤的帮助,请这样说,我将编辑并添加它们

首先,序列化大块数据(任何可能会影响堆的数据)对protobuf没有好处。简单的事情

1-获取内容的字节流(缓冲) 2-构造一条protobuf消息(例如:ContentChunk),并添加至少2个表示块顺序和块部分的字段(取决于您的并发流量,块部分不应破坏堆,因此要明智地优化大小)。区块顺序将帮助服务器端以正确的顺序重建区块。 3-您可以为区块的内部框架添加额外字段,或在第一条消息中传递总长度。 4-最终为主协议消息实现外部帧。获取块,形成最终内容并将其持久化

对于第4项,检查Netty当前的框架支撑

Protobufvarint32帧解码器 Protobufvarint32长字段预装药

你的管道应该是这样的

        bootstrap.setPipelineFactory (new ChannelPipelineFactory () {
        @Override
        public ChannelPipeline getPipeline () throws Exception {
            ChannelPipeline pipeline = Channels.pipeline ();
            pipeline.addLast ("frameDecoder", new ProtobufVarint32FrameDecoder ());
            pipeline.addLast ("protobufDecoder", new ProtobufDecoder (YOURPROTOCOL.ProtocolMessage.getDefaultInstance ()));

            pipeline.addLast ("frameEncoder", new ProtobufVarint32LengthFieldPrepender ());
            pipeline.addLast ("protobufEncoder", new ProtobufEncoder ());

            pipeline.addLast ("handler", new ClientEventHandler ());
            return pipeline;
        }
    });