thrift
文章平均质量分 71
10km
这个作者很懒,什么都没留下…
展开
-
c++ thrift 库调试信息输出
thrift是一个跨平台的RPC框架,用了很久,但一直不知道如何输出它的内部日志,很长时间了,因为用不上,拿倒也相安无事。今天遇到thrift 底层socket通讯的问题,一直找不到原因,就把TSocket.cpp代码撸了一遍,才搞明白thrift库输出日志的方式。thrift有一个类型为apache::thrift::TOutput的全局变量GlobalOutput(定义在thrift/TOutput.h),通过调用其 setOutputFunction函数设置一个实现输出日志的回调函数,就可以让Th原创 2021-01-14 13:26:45 · 737 阅读 · 0 评论 -
通过升级cmake版本解决NDK编译报错:no member named ‘signbit‘ in the global namespace;
今天在ubuntu16下使用NDK(r19)编译thrift c++库时报了很多类似如下的错误:/android-ndk-r19c/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/cmath:314:9: error:no member named ‘signbit’ in the global namespace; did you mean‘__signbit’?using ::signbit;~~^/usr/原创 2020-12-04 12:50:44 · 4335 阅读 · 1 评论 -
thrifty-compiler maven插件
之前写过一篇文章介绍如何用thrifty-compiler 通过IDL生成client代码《Microsoft/thrifty:解决thrifty-compiler.jar运行报错不能编译IDL生成java class代码问题》但是Microsoft/thrifty官方并没有提供maven插件用于在maven中调用thrifty-compiler,我的项目是用maven组织的所以在pom....原创 2019-07-07 13:02:44 · 322 阅读 · 0 评论 -
facebook/swift:构建thrift http server(4)--ThriftXHRDecoder,ThriftXHREncoder
在上一篇博客中解决了thrift http sever的CORS跨域问题,但前端依然没有服务端的正常响应。看来还存在问题。继续研究Netty的代码。## ThriftMessage通过跟踪服务端收到的HTTP POST请求在管道(ChannelPipeline)中的传递流程找到了问题:原创 2019-05-04 23:03:53 · 455 阅读 · 1 评论 -
facebook/swift:构建thrift http server(1)
如何基于facebook/swift构建一个支持HTTP访问的thrift服务?说来话长。我将用分几篇博客介绍这个问题的解决思路和具体实现。背景说明我有一个项目facelog,是基于facebook/swift框架(java)开发的。在实际的项目应用时,需要从浏览器端能调用facelog的接口方法,要实现这个功能,一个笨办法就是专门写一个java web应用,相当于一个二传手,对浏览器需要访问...原创 2019-05-04 00:46:23 · 1177 阅读 · 1 评论 -
facebook/swift:构建thrift http server(2)--HttpServerCodec
在为facelog选择XHR实现方案时,我反复看过[facebook/swift](https://github.com/facebookarchive/swift),了解到它依赖的底层通讯框架是[netty](https://github.com/netty/netty),说实话,我之前对netty并不太了解,藉于这次任务需要,我才花时间进一步了解了一下netty是什么。我好像明白facebook/swift为什么要基于netty设计了,netty本就是一个高效的异步通讯框架,你可以利用它实现你想要的任原创 2019-05-04 19:27:44 · 1365 阅读 · 1 评论 -
facebook/swift:构建thrift http server(3)--CORS跨域
在上一篇文章中我已经通过替换`frameCodec`为`HttpServerCodec`将`ThriftServer`改造为可以接收HTTP响应的netty server。完成代码修改后,赶紧用浏览器测试一下:通过拦截到的这个已经解码成`DefaultHttpRequest`对象的HTTP请求,至少可以判断替换的`HttpServerCodec`编解码器已经生效了,但这第一个HTTP请求居然不是浏览器端发出的`POST`,而是我不认识的`OPTIONS`,何解?这就引出了XHR请求的另一个问题C原创 2019-05-04 21:48:34 · 852 阅读 · 1 评论 -
Microsoft/thrifty vs facebook/swift: TTransportException:Buffer doesn‘t have enough bytes to read 异常
基于thrift的RPC系统中,如果service端是基于facebook的[swift](https://github.com/facebook/swift)开源框架实现的,而client是基于Microsoft的[thrifty](https://github.com/Microsoft/thrifty)开源框架实现的,那么在client向service端发送请求时,service端就可能会抛出本文标题所说的异常。原创 2019-01-08 23:27:50 · 1296 阅读 · 1 评论 -
Microsoft/thrifty:RPC方法返回NULL的异常处理
我们知道:thrift框架是不允许返回值为null的,如果返回值为null,client端会抛出异常,我在之用facebook/swift框架时就遇到了这个问题,这是当时解决问题的记录《thrift:返回null的解决办法》,现在使用Microsoft/thrifty框架实现的客户端同样也存在这个问题。下面是thifty-compiler生成的client端存根代码的receive方法的部分片段...原创 2019-01-10 18:31:11 · 1295 阅读 · 1 评论 -
Microsoft/thrifty:解决thrifty-compiler.jar运行报错不能编译IDL生成java class代码问题
thrifty是什么thrifty,对,没有拼写错,就是thrifty,是Microsoft的一个开源项目(https://github.com/Microsoft/thrifty),你可以简单理解为它是一个android版本的thrift框架,是facebook贡献给apache基金会的thrift框架在android平台的实现,与thrift完全兼容。为什么Microsoft会重复制造轮子...原创 2019-01-04 12:55:22 · 759 阅读 · 1 评论 -
thrift:在cygwin下编译C library for win32(lib/c_glib)
如果要编译thrift的C++ 库,参照thrift官方的说明:Building thrift on Windows (Native) 使用cmake 编译还是比较方便的。(有空专门写一个thrift c++库的编译过程)但是要在windows下编译thrift C library,用MSVC或MinGW都是无法编译的,也无法借助MSYS2环境编译。必须在cygwin下编译.原因就是lib/...原创 2018-05-20 14:20:03 · 1033 阅读 · 1 评论 -
thrift:swift 命令行生成 IDL文件及Client java代码过程
swift是一个用于创建thrift 序列化类型和服务的java工具库,使用swfit可以生成非常简洁的java代码。并且更重要的是可以通过java代码生成接口描述文件(Thrift interface description language,IDL). 多数情况下,服务端的应用都是java写的。使用swift提供的工具,可以直接生成IDL,再用IDL生成其他语言的client端代码 (jav...原创 2017-10-11 15:12:17 · 4074 阅读 · 5 评论 -
thrift/swift/nifty:获取客户端ip的简单方法
一个RPC方法中需要知道客户端的IP要怎么实现? 网上看了一堆关于thrift获取获取client ip的文章,基本都要自己写一个TServerEventHandler或TProcessor来实现。如下,所有的文章讲到的都是这两种方法。 《两种方式获取Thrift调用的客户端IP地址》虽然没有再深入研究,但我想如果用thrift这应该是正确的办法。 但是看着好烦呐,不就获取个ip...原创 2017-11-17 16:44:00 · 1922 阅读 · 2 评论 -
thrift/swift:ThriftMethodProcessor代码分析
thrift是一种跨语言的RPC框架,为了保证在各种语言下都能正确表述,IDL语言在设计的时候就只能选取各种语言的共性。 比如对于null,虽然在java中定义一个字段为Integer类型,那么这个字段就可以为null,但thrift不允许primitive类型的数据字段为null,因为在c/c++的struct的字段中没有null的概念。做为方法的参数传递,primitive类型也是同样的道理...原创 2017-12-16 15:57:21 · 718 阅读 · 0 评论 -
thrift/swift:服务端数据类型和client端数据类型之间的直接转换
需求描述我们知道,thrift/swift框架中,服务端的数据类型与client的类型是相互独立的,比如服务端有一个ClassA类型,到了client端,同样也会生成一个同名的类。服务端和client相互通信时,client的 ClassA会被转成数据流(二进制或HTML或JSON…),通过网络传输到服务端,服务端收到数据流后再转换服务端的ClassA,反之亦然。这个过程是由thrift框架自...原创 2018-03-04 10:13:44 · 1581 阅读 · 1 评论 -
thrift/swift:codegen-thrift java代码生成器
codegen-thrift 是最近我完成的一个java代码生成程序,实现从普通接口类型生成基于thrift/swift框架的service/client 端封装java代码.这个工具可以让你在不修改现有的接口定义的情况下,自动生成基于现有接口的thrift service /client代码,实现client端通过网络对服务端接口的透明调用。支持byte[],Date,float,Float...原创 2018-03-06 14:59:27 · 1502 阅读 · 1 评论