当前位置: 首页 > 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 来处理不同的服务。
http://www.lryc.cn/news/573090.html

相关文章:

  • 使用Vue3开发Electorn桌面应用
  • Maven-添加子模块
  • Vue2 day02
  • 记录一次:Java Web 项目 CSS 样式/图片丢失问题:一次深度排查与根源分析
  • 【STM32】STM32的中断系统寄存器NVIC、EXTI
  • Leetcode 440. 字典序的第K小数字
  • C++ CAN总线数据处理框架解析
  • 力扣1477. 找两个和为目标值且不重叠的子数组
  • YOLO官方自带的数据集Dotav1,直接训练
  • Python爬虫实战:研究threading相关技术
  • 状态模式详解
  • Filecoin系列 - IPLD 技术分析
  • verilog HDLBits刷题“Module shift8”--模块 shift8---模块和向量
  • Python 的内置函数 hasattr
  • 中国设计 全球审美 | 安贝斯新产品发布会:以东方美学开辟控制台仿生智造新纪元
  • 【Koa系列】10min快速入门Koa
  • 蓝牙 5.0 新特性全解析:传输距离与速度提升的底层逻辑(面试宝典版)
  • 项目开发中途遇到困难的解决方案
  • 深入解析BERT:语言分类任务的革命性引擎
  • 创业知识概论
  • tkinter Entry(输入框)组件学习指南
  • 加密货币:比特币
  • 5.3 LED字符设备驱动
  • HarmonyOS 6 + 盘古大模型5.5
  • 【Python】Excel表格操作:ISBN转条形码
  • 西门子S7通信协议抓包分析应用
  • 【入门级-基础知识与编程环境:NOI以及相关活动的历史】
  • AI 产品的“嵌点”(Embedded Touchpoints)
  • python打卡day37
  • 智能体互联网新闻速递及深度分析【250620】