当前位置: 首页 > news >正文

TMultiplexedProtocol 和 TMultiplexedProcessor

TMultiplexedProtocol 和 TMultiplexedProcessor 实际上都用于实现 Thrift 的多路复用,但它们的使用场景和方法有些不同。

1. TMultiplexedProtocol 的多路复用

TMultiplexedProtocol 主要用于 客户端传输层 之间的多路复用。它允许客户端在同一个连接上,通过指定不同的服务名来区分和调用不同的服务。
代码示例:
// 创建一个基础的传输对象
TTransport transport = new TSocket("localhost", 9090);
TProtocol baseProtocol = new TBinaryProtocol(transport);// 创建多路复用协议,分别为不同的服务设置服务名
TMultiplexedProtocol protocol1 = new TMultiplexedProtocol(baseProtocol, "ExampleService1");
TMultiplexedProtocol protocol2 = new TMultiplexedProtocol(baseProtocol, "ExampleService2");// 创建服务端和客户端,分别使用不同的协议
ExampleService1.Client client1 = new ExampleService1.Client(protocol1);
ExampleService2.Client client2 = new ExampleService2.Client(protocol2);// 使用 client1 和 client2 调用不同的服务方法
client1.someMethod();
client2.someOtherMethod();
说明:
  • TMultiplexedProtocol 通过在 客户端 使用不同的 服务名 来区分不同的服务。
  • 这个协议包装了一个基础协议(比如 TBinaryProtocol),并根据服务名来路由请求。
  • 客户端通过使用不同的 TMultiplexedProtocol 实例,调用不同的服务方法。服务端接收到请求时,通过协议中的服务名来决定调用哪个服务。
适用场景:
  • 客户端多路复用: 客户端可能需要调用多个服务,可以使用不同的 TMultiplexedProtocol 来处理多个服务的请求。

2. TMultiplexedProcessor 的多路复用

TMultiplexedProcessor 用于 服务端,它允许在同一个服务器端口上注册多个不同的服务。服务端根据请求中的服务名,路由到对应的服务处理器。
代码示例:
// 创建多路复用的处理器
TMultiplexedProcessor multiplexedProcessor = new TMultiplexedProcessor();// 注册多个服务
multiplexedProcessor.registerProcessor("ExampleService1",  // 服务名new ExampleService1.Processor<>(new ExampleService1Impl())
);
multiplexedProcessor.registerProcessor("ExampleService2",  // 服务名new ExampleService2.Processor<>(new ExampleService2Impl())
);// 创建服务器
TServerTransport serverTransport = new TServerSocket(9090);
TThreadPoolServer.Args args = new TThreadPoolServer.Args(serverTransport).processor(multiplexedProcessor).minWorkerThreads(2).maxWorkerThreads(10);// 启动服务器
TServer server = new TThreadPoolServer(args);
server.serve();  // 阻塞调用,直到服务停止
说明:
  • TMultiplexedProcessor 是服务端使用的多路复用处理器。你将多个服务(例如 ExampleService1 和 ExampleService2)注册到这个处理器中。
  • 当服务端接收到请求时,它会根据请求中的服务名来决定调用哪个服务。这样,多个服务可以共享同一个端口,而不需要为每个服务分配独立的端口。
适用场景:
  • 服务端多路复用: 在同一个端口上提供多个服务,通过服务名来区分不同的服务。

总结:两个多路复用的区别

  1. TMultiplexedProtocol(客户端使用)

        - 用于 客户端,通过传输协议区分不同服务。

        - 每个服务使用不同的协议包装(TMultiplexedProtocol)。
        - 适合一个客户端调用多个服务的场景。

  1. TMultiplexedProcessor(服务端使用)

        - 用于 服务端,通过服务名区分不同的服务处理器。
        - 每个服务在服务端注册为一个独立的处理器,服务名用于路由请求。
        - 适合多个服务共享同一个端口的场景。

  • TMultiplexedProtocol(客户端) 用于客户端调用多个服务时,通过不同的协议来区分不同的服务。
  • TMultiplexedProcessor(服务端) 用于在服务端共享同一个端口时,通过服务名来区分不同的服务。
这两者通常是配合使用的:客户端通过 TMultiplexedProtocol 发起请求,服务端通过 TMultiplexedProcessor 来处理不同的服务。

相关文章:

  • java 找出两个json文件的不同之处
  • Python Day55
  • Taro 跨端开发:从调试到发布的完整指南
  • Odoo 17 Many2one字段内联编辑完整实现方案
  • Zephyr 调试实用指南:日志系统、Shell CLI 与 GDB 全面解析
  • gRPC 与 Protobuf 的深度集成 —— 从服务定义到多语言交互(Go + Java 示例)
  • 将浮点数转换为分数
  • C#测试调用ClosedXML根据批注设置excel单元格内容
  • 【舞蹈】编排:如何对齐拍子并让小节倍数随BPM递减
  • 经典控制理论:线性化笔记
  • PowerBI HtmlContent生成表格
  • 磁性传感器在电机控制闭环系统中的反馈作用
  • 【JAVA】数组的使用
  • 数据分析核心指标体系:从求和、计数到比较的全维度计算方法
  • 基于ARM ubuntu如何进行交叉编译
  • 针对机器人自修复材料的具体推荐及特性分析
  • 操作系统进程与线程核心知识全览
  • 如何定时发布WordPress文章(多种方法)
  • 日常开发常用工具和技巧以及遇到的问题
  • 闲庭信步使用SV进行图像处理系列教程介绍
  • 旅游网站开发项目策划书/软文代写
  • 交做网贷的网站/平台代运营是什么意思
  • 怎样发布自己的网站/长沙seo袁飞
  • wordpress建壁纸站/广告联盟app下载官网
  • 企业建网站的 程序/关键词seo培训
  • 苏州网站公司排名前十/网站制作优化排名