Thrift - 每个 Socket 都有不同的 Handler 实例

2024-01-11

我正在 Thrift 中开发一个“代理”服务器。我的问题是,传入代理的每个连接都使用相同的处理程序实例。代理的客户端实现位于处理程序中,因此所有客户端都通过同一连接与终端服务器进行通信。

我有:n 个客户端 -> n 个套接字 -> 1 个处理程序 -> 1 个套接字 -> 1 个服务器 我想要实现的:n 个客户端 -> n 个套接字 -> n 个处理程序 -> n 个套接字 -> 1 个服务器

现在的问题是,如果客户端更改服务器上的“本地”参数(为每个客户端独立定义的参数),其他客户端也将使用更改后的环境。

shared_ptr<CassProxyHandler> handler(new CassProxyHandler(adr_s,port_s,keyspace));
shared_ptr<TProcessor> processor(new CassandraProcessor(handler));
shared_ptr<TServerTransport> serverTransport(new TServerSocket(port));
shared_ptr<TTransportFactory> transportFactory(new TFramedTransportFactory());
shared_ptr<TProtocolFactory> protocolFactory(new TBinaryProtocolFactory());
TThreadedServer server(processor, serverTransport, transportFactory, protocolFactory);
server.serve();

有没有一种方法来实现服务器,为每个服务器套接字创建一个新的处理程序实例,而不是使用相同的处理程序?

感谢您的任何建议或帮助, @


我已经设法解决了这个问题。 Java 中已经实现了一个解决方案。我使用了同样的想法并用 C++ 实现了它。

我做的第一件事是创建一个 TProcessorFactory 而不是 TTransport 类。它处理每个连接的 TProcessors。它里面有一个map结构,所以它的get函数为每个TTransport返回对应的TProcessor。每个客户端对应的(唯一的)TProcessor。

我必须创建一个新的 TServer,因此它将接受新创建的参数 TProcessorFactory 而不是 TProcessor。在 TServer 中还需要更改几个函数调用。您的 getProcessor 函数将不再返回 TProcessor 而是 TProcessorFactory (因此更改返回类型并重命名)。

您要做的最后一件事是实现一个允许实例化的服务器,它是 TServer 的派生类。我建议使用 TNonblockingServer(实施更改有点困难)或 TThreadPoolServer。您必须更改几个函数调用。在 TProcessorFactory 上使用带有 TTransport 参数的 get 函数来获取需要的 TProcessor。 TTransport 参数对于每个线程都是唯一的,每个客户端连接都由一个线程处理。

还要确保删除旧的 TProcessors,因为 thrift 重用(至少使用 TNonblockingServer)TTransport,所以如果你不删除它们并且客户端连接,他可能会得到一个不活动的先前会话,而你可能不想要它。如果使用共享指针,只需将它们从映射结构中删除,当客户端断开连接时,如果thrift不再需要它们,它们将被销毁。

我希望这对遇到我同样问题的人有所帮助。如果您不知道 thrift 的内部结构,这里有一个很好的指南:http://diwakergupta.github.com/thrift-missing-guide/ http://diwakergupta.github.com/thrift-missing-guide/

我希望 Thrift 开发人员能够在不久的将来实现类似但更复杂和抽象的解决方案。

@

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Thrift - 每个 Socket 都有不同的 Handler 实例 的相关文章

  • 根据属性的类型使用文本框或复选框

    如果我有这样的结构 public class Parent public string Name get set public List
  • 类型中的属性名称必须是唯一的

    我正在使用 Entity Framework 5 并且有以下实体 public class User public Int32 Id get set public String Username get set public virtual
  • 如何从 Visual Studio 将视图导航到其控制器?

    问题是解决方案资源管理器上有 29 个项目 而且项目同时具有 ASP NET MVC 和 ASP NET Web 表单结构 在MVC部分中 Controller文件夹中有大约100个子文件夹 每个文件夹至少有3 4个控制器 视图完全位于不同
  • 如何在 C# 中打开 Internet Explorer 属性窗口

    我正在开发一个 Windows 应用程序 我必须向用户提供一种通过打开 IE 设置窗口来更改代理设置的方法 Google Chrome 使用相同的方法 当您尝试更改 Chrome 中的代理设置时 它将打开 Internet Explorer
  • 为什么 GCC 不允许我创建“内联静态 std::stringstream”?

    我将直接前往 MCVE include
  • 如何在 C++ 中标记字符串?

    Java有一个方便的分割方法 String str The quick brown fox String results str split 在 C 中是否有一种简单的方法可以做到这一点 The 增强分词器 http www boost o
  • 人脸 API DetectAsync 错误

    我想创建一个简单的程序来使用 Microsoft Azure Face API 和 Visual Studio 2015 检测人脸 遵循 https social technet microsoft com wiki contents ar
  • ASP.NET Core 3.1登录后如何获取用户信息

    我试图在登录 ASP NET Core 3 1 后获取用户信息 如姓名 电子邮件 id 等信息 这是我在登录操作中的代码 var claims new List
  • WcfSvcHost 的跨域异常

    对于另一个跨域问题 我深表歉意 我一整天都在与这个问题作斗争 现在已经到了沸腾的地步 我有一个 Silverlight 应用程序项目 SLApp1 一个用于托管 Silverlight SLApp1 Web 的 Web 项目和 WCF 项目
  • C# xml序列化必填字段

    我需要将一些字段标记为需要写入 XML 文件 但没有成功 我有一个包含约 30 个属性的配置类 这就是为什么我不能像这样封装所有属性 public string SomeProp get return someProp set if som
  • 为什么使用小于 32 位的整数?

    我总是喜欢使用最小尺寸的变量 这样效果就很好 但是如果我使用短字节整数而不是整数 并且内存是 32 位字可寻址 这真的会给我带来好处吗 编译器是否会做一些事情来增强内存使用 对于局部变量 它可能没有多大意义 但是在具有数千甚至数百万项的结构
  • 为什么 isnormal() 说一个值是正常的,而实际上不是?

    include
  • 如何在 Android 中使用 C# 生成的 RSA 公钥?

    我想在无法假定 HTTPS 可用的情况下确保 Android 应用程序和 C ASP NET 服务器之间的消息隐私 我想使用 RSA 来加密 Android 设备首次联系服务器时传输的对称密钥 RSA密钥对已在服务器上生成 私钥保存在服务器
  • 编译时展开 for 循环内的模板参数?

    维基百科 here http en wikipedia org wiki Template metaprogramming Compile time code optimization 给出了 for 循环的编译时展开 我想知道我们是否可以
  • C# 中的 IPC 机制 - 用法和最佳实践

    不久前我在 Win32 代码中使用了 IPC 临界区 事件和信号量 NET环境下场景如何 是否有任何教程解释所有可用选项以及何时使用以及为什么 微软最近在IPC方面的东西是Windows 通信基础 http en wikipedia org
  • 为什么C++代码执行速度比java慢?

    我最近用 Java 编写了一个计算密集型算法 然后将其翻译为 C 令我惊讶的是 C 的执行速度要慢得多 我现在已经编写了一个更短的 Java 测试程序和一个相应的 C 程序 见下文 我的原始代码具有大量数组访问功能 测试代码也是如此 C 的
  • C++ 中的 include 和 using 命名空间

    用于使用cout 我需要指定两者 include
  • 当文件流没有新数据时如何防止fgets阻塞

    我有一个popen 执行的函数tail f sometextfile 只要文件流中有数据显然我就可以通过fgets 现在 如果没有新数据来自尾部 fgets 挂起 我试过ferror and feof 无济于事 我怎样才能确定fgets 当
  • 指针和内存范围

    我已经用 C 语言编程有一段时间了 但对 C 语言还是很陌生 有时我对 C 处理内存的方式感到困惑 考虑以下有效的 C 代码片段 const char string void where is this pointer variable l
  • 从 mvc 控制器使用 Web api 控制器操作

    我有两个控制器 一个mvc控制器和一个api控制器 它们都在同一个项目中 HomeController Controller DataController ApiController 如果我想从 HomeController 中使用 Dat

随机推荐

  • 具有 openid 连接重定向的反向代理

    在我的应用程序中我集成了Identity server 3 with openid connect 在我们的生产服务器上 我们的网站位于反向代理后面 这会导致问题 当用户登录并被身份服务器重定向回来时 我们的应用程序希望将用户重定向到他的原
  • 如何在 JavaScript 中获取 css3 翻译后元素的位置?

    我在 stackoverflow 上看到了以两种不同形式发布的内容 但这些解决方案对我不起作用 本质上 我有一个要翻译的项目 当我执行 obj style left 或 obj offsetLeft 时 在元素被翻译后 我得到 0 无论如何
  • Docker:容器与本地安装

    在周末第一次使用 Docker 并看到 irssi mutt 浏览器等所有内容的小图像之后 我想知道本地安装的软件包是否正在为数十个容器让路 我可以看到保持基本系统非常干净以及拥有所有这些容器都是独立的并且可以轻松地重新定位到不同桌面 甚至
  • 将 pandas join 中的列后缀转换为 MultiIndex

    我有两个 pandas DataFrame 它们具有 不一定 相同的索引和列名称 gt gt gt df L pd DataFrame X 1 3 Y 5 7 gt gt gt df R pd DataFrame X 2 4 Y 6 8 我
  • 如果未安装应用程序,如何从深层链接重定向到应用程序商店?

    我希望用户能够通过 Facebook 等共享链接 例如 app com SKFLA 这主要是因为深层链接本身不可点击 单击时 会重定向到深层链接应用程序 SKFLA 如果安装了该应用程序 则会打开该应用程序 到目前为止一切正常 但如果该应用
  • Javascript / CSS:设置(firefox)iframe 的缩放级别?

    我想创建一个包含多个显示不同页面的 iframe 的页面 一种 并排浏览多个页面 类型的东西 问题是这样做时 视口非常小 我只能看到每个页面的左上角 有没有办法设置 iframe 来有效地执行 Firefox 的缩小 ctrl 减号 几次
  • 如何在Java中向文件写入换行符

    我有一个包含新行的字符串 我将此字符串发送到一个函数 以将字符串写入文本文件 如下所示 public static void writeResult String writeFileName String text try FileWrit
  • 按等级排列的 FindBugs 2.0 错误列表?

    我知道有list http findbugs sourceforge net bugDescriptions html错误 但我想要一个包含有关排名 版本 2 0 中为 1 到 20 或至少有关排名组 令人担忧 令人不安 可怕 最可怕 的附
  • 在SecurityManager下创建对象时出现NoClassDefFoundError

    我试图通过在非常严格的 SecurityManager 下运行处理用户提供的内容的代码来保护我的应用程序 它是 AccessController doPrivileged 的本质 通常这用于提供具有额外权限的代码块 但我使用它来将代码块限制
  • Spring Boot 日志中缺少应用程序名称

    例如 人们通常会得到这样的内容 my service id 是应用程序名称 2016 02 11 17 12 45 404 INFO my service id 85184 nio 8080 exec 1 com example MySim
  • SQL Server 2014 合并重叠的日期范围

    我在 SQL Server 2014 数据库中有一个包含 200 000 行的表 如下所示 CREATE TABLE DateRanges Contract VARCHAR 8 Sector VARCHAR 8 StartDate DATE
  • JNDI 没有可用于处理的 EJB 接收器

    我的 EJBTest 有问题 我已经安装了WildFly并配置了用户管理和应用程序管理 我编写了一个 EJB 3 0 并部署了它 Stateless Remote NewSessionBeanRemote class public clas
  • 如何在 1 个 Windows 服务中托管 2 个 WCF 服务?

    我有一个 WCF 应用程序 它有两个服务 我尝试使用 net tcp 将它们托管在单个 Windows 服务中 我可以很好地运行其中一个服务 但是当我尝试将它们都放入 Windows 服务时 只有第一个服务会加载 我已确定正在调用第二个服务
  • 将 WCF 服务与 Entity Framework 4 和...DTO 结合使用?

    如上所述 我正在实现一个多层架构来与 WCF 和 Entity Framework 4 使用 poco 配合使用 由于我已经对 POCO 持久性一无所知 所以我确实需要实现 DTO 或者我可以以其纯粹的方式使用 WCF 主要引用是 我确实需
  • Python - 如何通过空格将标点符号与单词分开,在标点符号和单词之间只留下一个空格?

    我有以下字符串 input I love programming with Python 3 3 Do you It s great I give it a 10 10 It s free to use no involved 除了 和 之
  • Node.js 准备好用于生产了吗? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 开始一个新项目 它基本上是一个博客 评论系统 我们正在考虑使用 Node js 作为后端服务器 Node js 是否已准备好应对此类事情 还是还
  • 在swift 3和核心图形中画一条直线

    我正在尝试使用核心图形和 swift 3 绘制一条直线 但是 当调用touchesmoved 时 它会创建多条线 而不仅仅是一条线 使用的代码如下 import UIKit class ViewController UIViewContro
  • 不需要的 onItemSelected 调用

    我有 36 个微调器 我已经用一些值初始化了它们 我已经与他们一起使用了 onItemSelectedListener 像往常一样 用户可以与这些旋转器交互 触发 onItemSeected 函数 一个问题是调用是在 init 期间进行的
  • 无法让 Swagger UI 与 Spring boot 一起使用

    我正在尝试让 Swagger UI 与 Spring Boot 1 2 1 一起使用 我按照以下说明进行操作https github com martypitt swagger springmvc https github com mart
  • Thrift - 每个 Socket 都有不同的 Handler 实例

    我正在 Thrift 中开发一个 代理 服务器 我的问题是 传入代理的每个连接都使用相同的处理程序实例 代理的客户端实现位于处理程序中 因此所有客户端都通过同一连接与终端服务器进行通信 我有 n 个客户端 gt n 个套接字 gt 1 个处