中间件thirft的Linux部署与运用
来源:互联网 发布:太原手机数据恢复 编辑:程序博客网 时间:2024/06/03 13:34
前一段时间一直在想一个问题,一般的web服务器是如何和当前我的C++服务器进行通讯的。
当然方法有很多,比如我现在正值使用的gsoap,对于远程web主机来说,我只要提供一个内网的IP,它们就可以像调用webServer那样直接调用。
但是也遇到过几起因为gsoap组件出现的诡异问题,最奇怪的是,机房服务器有几次存储挂掉居然是因为goap崩溃了?虽然系统管理员给我的日志以及解释很站不住脚。
不过鉴于越写越庞大,以及越来越难以维护的gsoap代码(这里有历史原因)。我还是想找一个gsoap的替换方案。替换当前的方式。
以前写过一些中间件组件的代码,但是都太庞大。别说用了,光部署就要折腾半天时间。有没有简单好用的,可以支持不同语言,不同服务之间的通讯呢?
这里强烈感谢7CAT。他给了我很大的支持,并推荐了thrift这个组件。
但是,从安装到最后达成我自己写的测试用例,还是废了一番周折的,走了一些弯路,但是最后的结果是值得的,达到了我的预期效果。
首先,thrift可以从官方网站下载。http://thrift.apache.org/
实际大小很小,大概也就3.3M,当前最新版本0.9.1
下载以后,在Linux下开始编译。
但是编译顺序远非它的说明文档里面的那样简洁。
如果按照它的说明文档编译,你会遇到各种错误,
比如,你要加入各种 ./configure --with-qt4=no 这样的限制条件,默认它会采用认为你有qt4,对于纯命令行的服务器而言,这个是无用的。
就算这样,你还是会遇到编译失败(例子代码无法编译)。查询说必须去下载它的git,git也下载了,错误依然。
是在是没办法,于是只好手动去编译它,不让它去编译自己的例子。
以下是编译步骤,按照这个步骤0.9.1会编译成功。
首先进入compiler的cpp目录,去make
再去lib\cpp里面去make
最后编译它的教程tutoials\cpp
好了,组件编译好了,下面来写一个标准的idl吧,以前写过ice的idl文件,看到这样的语法很亲切的感觉。
一个简单的例子,一个GetWebInfo方法,获得一个vector容器,并把容器内的数据打印出来
idl文件写好了,记得保存在compiler/cpp目录下。存为文件名mytest.thrift
实现相关代码
然后在linux下编译,让它生成中间文件。
如果程序没问题的话,会在当前目录上生成 一个gen-cpp文件夹。
这些都是你需要的中间文件,你把这些文件拷贝到你自己的工程目录下。
比如,我把这些文件拷贝到了我的idl目录下。
好了,东西都准备好了。
写一个server和client吧。
然后再写一个客户端
为了方便,再写两个make文件。
先写一个make.define,用于公共调用。
再写两个make 分别是makefile_server和makefile_client
编译的时候, make -f makefile_server 和make -f makefile_client。
好了,编译一切顺利,运行。
输出结果:
(客户端输出)
-bash-4.1$ ./MytestClient
[main]Client is Begin(2).
[main]Client is End.
(服务端输出)
-bash-4.1$ ./MytestServer
Starting the server...
[GetWebInfo]Begin(2).
[Data]ntag=1,strData=freeeyes.
[Data]ntag=2,strData=shiqiang.
[GetWebInfo]End.
OK,全部达成。
当然方法有很多,比如我现在正值使用的gsoap,对于远程web主机来说,我只要提供一个内网的IP,它们就可以像调用webServer那样直接调用。
但是也遇到过几起因为gsoap组件出现的诡异问题,最奇怪的是,机房服务器有几次存储挂掉居然是因为goap崩溃了?虽然系统管理员给我的日志以及解释很站不住脚。
不过鉴于越写越庞大,以及越来越难以维护的gsoap代码(这里有历史原因)。我还是想找一个gsoap的替换方案。替换当前的方式。
以前写过一些中间件组件的代码,但是都太庞大。别说用了,光部署就要折腾半天时间。有没有简单好用的,可以支持不同语言,不同服务之间的通讯呢?
这里强烈感谢7CAT。他给了我很大的支持,并推荐了thrift这个组件。
但是,从安装到最后达成我自己写的测试用例,还是废了一番周折的,走了一些弯路,但是最后的结果是值得的,达到了我的预期效果。
首先,thrift可以从官方网站下载。http://thrift.apache.org/
实际大小很小,大概也就3.3M,当前最新版本0.9.1
下载以后,在Linux下开始编译。
但是编译顺序远非它的说明文档里面的那样简洁。
如果按照它的说明文档编译,你会遇到各种错误,
比如,你要加入各种 ./configure --with-qt4=no 这样的限制条件,默认它会采用认为你有qt4,对于纯命令行的服务器而言,这个是无用的。
就算这样,你还是会遇到编译失败(例子代码无法编译)。查询说必须去下载它的git,git也下载了,错误依然。
是在是没办法,于是只好手动去编译它,不让它去编译自己的例子。
以下是编译步骤,按照这个步骤0.9.1会编译成功。
首先进入compiler的cpp目录,去make
再去lib\cpp里面去make
最后编译它的教程tutoials\cpp
好了,组件编译好了,下面来写一个标准的idl吧,以前写过ice的idl文件,看到这样的语法很亲切的感觉。
一个简单的例子,一个GetWebInfo方法,获得一个vector容器,并把容器内的数据打印出来
idl文件写好了,记得保存在compiler/cpp目录下。存为文件名mytest.thrift
实现相关代码
然后在linux下编译,让它生成中间文件。
如果程序没问题的话,会在当前目录上生成 一个gen-cpp文件夹。
这些都是你需要的中间文件,你把这些文件拷贝到你自己的工程目录下。
比如,我把这些文件拷贝到了我的idl目录下。
好了,东西都准备好了。
写一个server和client吧。
然后再写一个客户端
为了方便,再写两个make文件。
先写一个make.define,用于公共调用。
再写两个make 分别是makefile_server和makefile_client
编译的时候, make -f makefile_server 和make -f makefile_client。
好了,编译一切顺利,运行。
输出结果:
(客户端输出)
-bash-4.1$ ./MytestClient
[main]Client is Begin(2).
[main]Client is End.
(服务端输出)
-bash-4.1$ ./MytestServer
Starting the server...
[GetWebInfo]Begin(2).
[Data]ntag=1,strData=freeeyes.
[Data]ntag=2,strData=shiqiang.
[GetWebInfo]End.
OK,全部达成。
此代码在Linux下测试通过。代码包如下。
http://www.acejoy.com/ace/thread-5802-1-1.html
0 0
- 中间件thirft的Linux部署与运用
- 消息中间件RocketMQ的安装与部署
- 消息中间件--ActiveMQ的使用与部署
- Thirft简介与用法
- Linux环境下部署tomcat中间件
- 中间件mycat入门(一):部署与介绍
- 学习Linux运用与Unix运用的异曲同工之处
- 什么是中间件与中间件的发展历史
- linux下redis的安装与运用
- 中间件实验2 远程方法调用RMI的设计与部署
- Thirft工作模式与协议、示例代码
- Thirft框架介绍 ---- 董的文章1
- 中间件的概念与演变
- 中间件与SOA的关系
- 中间件的概念与演变
- 消息中间件kafka+zookeeper集群部署、测试与应用
- 消息中间件kafka+zookeeper集群部署、测试与应用
- ORACLE 11G的BIEE 部署与运用(二)——BIEE的部署(图示)
- HardCore 的《黑客与画家》
- PHP程序员必须学习的第二课——网站安全问题预防
- Mac 下 Chrome 快捷键大全
- 穷举法解决问题(1,2)
- 钱文忠解读百家姓
- 中间件thirft的Linux部署与运用
- sql通过游标遍历某个数据库中所有的表,按某种需求筛选出对应的记录
- quick-cocos2d-x游戏开发——StateMachine状态机
- 函数参数问题
- 关于大量短链的内核参数优化
- A Singular Value Decomposition Approach For Recommendation Systems (4)
- jQuery对象和DOM对象的相互转换
- PCL中的CAMERA_FRAME和LASER_FRAME
- mybatis异常ambiguous in Mapped Statements collection 解决方法