当前位置: 代码迷 >> 综合 >> Program received signal SIGABRT, Aborted + Thrift transport::TSocket::local_open
  详细解决方案

Program received signal SIGABRT, Aborted + Thrift transport::TSocket::local_open

热度:87   发布时间:2024-01-11 08:45:27.0


thrift中TNonblockingServer的简单用法http://blog.csdn.net/jianbinhe1012/article/details/7726738

分类: c++ thrift

    最近在项目中需要把客户端的一些信息发送到服务器上,听起来是个很简单的需求,但是实际考虑下,觉得如果自己手工实现,工作量也不小,而且尽是些繁琐且无聊的事情,遂考虑用现成的库来实现。对比了protocol buffer与thrift后,本着偷懒到底的原则,选择了thrift,因为thrift本身提供了RPC框架,而protocol buffer仅是个序列化的库而已。

   首先是编译thrift,这里参考官方说明,需要先装boost库,但是如果要使用nonblocking server的话,还要再把libevent库也装上。

    thrift提供了三种服务模型,分别是TSimpleServer, TThreadPoolServer和TNonblockingServer,除去第一个一般仅做测试用,后两个都可以在实际生产中拿来用。在客户端不多的情况下,可以选用TThreadPoolServer,但是要注意TThreadPoolServer的客户端只要不从服务器上断开连接,就会一直占据服务器的一个线程,当服务器线程池所有线程都在被使用时,新到来的客户端将排在队列里等待,直到有客户端断开连接,使服务器端线程池出现空闲线程方可继续被提供服务,所以使用这种模型时,一定要注意客户端不使用时不要长时间连接服务器,如果确实有这种需求,请使用TNonblockingServer。

    说实话,单纯从代码量上来讲,使用Nonblocking server并不比ThreadPool server多了多少,谁让代码都是由thrift程序生成的,用户只需填上实际处理的代码即可。

    下面用一个简单的例子说明

    clientInfo.thrift

[plain]  view plain copy
  1. namespace cpp vnmp  
  2.   
  3. enum ClientType {  
  4.     DOM_MANAGER,  
  5.     DOM_SERVICE  
  6. }  
  7.   
  8. enum RegistResult {  
  9.     SUCCESS,  
  10.     NAME_EXISTED,  
  11.     INVALIE_PARA,  
  12. }  
  13.   
  14. struct ClientInfo {  
  15.     1: string name,  
  16.     2: string realIP,  
  17.     3: string vpnIP,  
  18.     4: ClientType type,  
  19.     5: optional string description,  
  相关解决方案