xmpp协议如何支持发送/接受离线文件思路之一

最近项目中需要使用openfire来做即时消息的传输,但是工程要求用户传递的各种数据都要在服务器备份,且需要支持离线文件的发送和接受。翻阅网上一些资料得知openfire是不支持离线文件的传递,它是socks5代理服务器实现的P2P协议的文件传输。于是只能自己去实现这个功能,整理一下思路:

1,开发Openfire插件,使用http/ftp协议发送和接收离线文件。这个工作量目前还没评估一下到底有多少,可靠性有多少等等,我比较倾向于Http协议,看了ftp协议与http协议的比较,ftp比较适合大文件的传输,而Http比较适合小文件的传输。项目中可预见的没什么大的文件,最多也就几M,所以http足已;

2,是不是可以把所有的文件都编码压缩转换成String数据,然后直接走XMPP的消息通路。因为之前做过Androidpn的推送(也是基于Openfire的推送服务器)项目,需要推送照片等文件,当时我的解决办法是把图片文件编码压缩成String推送的,客户端接受之后解压缩转化...这种处理也还不错,试过几十兆的图片也没问题。但目前这个项目中遇到的文件类型可能不较多,不知道这种思路还是否可行;

3,<朋友的思路>  当用户离线时,服务器伪造一个握手的信息给发送端,让发送方把文件传递到服务器,当接受方上线时,检测该用户是否有未接收的离线文件,如有就立即发送给他。(如果用户特别多,服务器压力是否太大??)

4,看到以下这篇文章觉得这个是靠普的方法之一。


本周需要确定方案。

/*********************************************************************************************************************************************************************************

以下转载:

http://blog.sina.com.cn/s/blog_48c49d5d0100rhdr.html

即时通讯(xmpp协议)发送离线文件

 
   离线文件发送可以作为即时通讯中网络硬盘的一种特殊情况,可以有多种实现方法。
   数据(文件)与元数据(文件信息,包括存储位置,大小,授权等)分离应该是比较好的实践,元数据使用XMPP服务外部组件的形式存储,发送方发送前从xmpp服务取得数据存储位置,发送数据成功后通知xmpp服务,接收方上线后从xmpp服务读取元数据,再根据元数据中的位置信息和授权信息取得真实数据,完成离线文件传输。
  需要解决和权衡的几个问题分别是文件系统选项,授权和客户端工作量,amazon的S3是个不错的选择,可是国内网络和使用都不方便,开源的Eucalyptus支持S3接口倒是可以考虑,而且S3做文件授权也方便。
    mongodb做存储也是不错的选择,可是mongodb的验证系统还较为简单,除了使用临时用户没有别的方式实现授权。
    S3和Mongodb都可以提供高可用的集群支持。
  BOSS提供了另一种方案,直接改造Proxy65,这种方案对客户端开发人员来说代价最小,可以很快出来可用的原型。
  Proxy65提供的是字节流的代理传输,在两个TCP(UDP可选)连接之间开辟通道实现字节流(可理解为文件)的传输,只需将传递字节流改为存储字节流即可。
   Proxy65提供的是字节流的代理传输,在两个TCP(UDP可选)连接之间开辟通道实现字节流(可理解为文件)的传输,只需将传递字节流改为存储字节流即可。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值