Jakarta ee 关于核心netty和Protobuf的教程
我正在从事分布式系统(Java/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没
任何关于如何使用文档的好教程。我假设您已经完成了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;
}
});