hadoop云盘客户端的设计与实现(二)

thrift服务器框架:

在网上找解决方案,一直无果无意间发现thrift服务器框架。

thrift服务器框架是一种多语言的开发框架,支持C++、Java、C#、python、...还有一些我没有听说过的开发语言,听起来一个很牛很强大的框架。网上说hadoop 1.2.1的版本是提供thrfit的服务的。我在hadoop的配置文件中确实找了, 有thrift 的定义文件。运行脚本thrfit hadoop api就打开了。起活。

这种方案貌似很好的样子,用thrift 可以根据thrfit的定义文件自动成c++代码,服务器框架已经搭好,只需要填写相应的功能代码就行了。我们只需要编写客户端代码,服务端代码就不需要编写,高并发处理thrift已经帮我们解决了。看是一个很好方案。

thrift 服务器端:

thrift服务器是hadoop 1.2.1本身提供的,是用java实现的。打开源码一看当时就有一点纠结,api接口中在进行二进制传输的时候竟然全部用String传输。我当时一愣,java的String是有编码格式的,而且是可以进行编码转换的,C++的std::string 好像是没有编码格式的。传输的是二进制内容肯定是不能做编码处理的,这样会不会出问题呀。

找了找thrift的数据定义,奇怪的是他们还真只有简单的数据类型,String就是用来进行二进制传输的,为了兼容多种开发语言,我想facebook也是一个无奈之举。用String跨语言、跨操作系统、跨编译器、真的能够正确的实现二进制文件传输吗?这是一个问题。


为了测试这种方案是否可行,我用hadoop 1.2.1的里的thrift的定义生成的了C++代码,实现编写了,客户端测试代码。

输入ip、端口,编译 运行,确实能够连接上hadoop,也能显示出分布式文件系统能够里的文件列表。是不是没有问题了,紧接着就是测试下载音频文件。测试的结果在意料之中,能够下载过来,文件变大了,而且用播放器是播放不出来的。很显然是string编码格式的问题。

后来搭建eclipse开发环境,添加各种jar包,生成java语言的服务器。查看实现部分进行二进制文件传输用的string编码格式是utf-8,这就是问题的所在。而C++这边的string是编码格式的,因为里面放的是二进制文件。最后各种尝试都没有找个访问,询问各位大神最终无解。

是不是就没有解决方案了。。。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值