xmpp协议如何支持发送/接受离线文件思路之一
2014-03-31 10:57
357 查看
最近项目中需要使用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服务读取元数据,再根据元数据中的位置信息和授权信息取得真实数据,完成离线文件传输。
需要解决和权衡的几个问题分别是文件系统选项,授权和客户端工作量,amazon的S3是个不错的选择,可是国内网络和使用都不方便,开源的Eucalyptus支持S3接口倒是可以考虑,而且S3做文件授权也方便。
mongodb做存储也是不错的选择,可是mongodb的验证系统还较为简单,除了使用临时用户没有别的方式实现授权。
S3和Mongodb都可以提供高可用的集群支持。
BOSS提供了另一种方案,直接改造Proxy65,这种方案对客户端开发人员来说代价最小,可以很快出来可用的原型。
Proxy65提供的是字节流的代理传输,在两个TCP(UDP可选)连接之间开辟通道实现字节流(可理解为文件)的传输,只需将传递字节流改为存储字节流即可。
Proxy65提供的是字节流的代理传输,在两个TCP(UDP可选)连接之间开辟通道实现字节流(可理解为文件)的传输,只需将传递字节流改为存储字节流即可。
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可选)连接之间开辟通道实现字节流(可理解为文件)的传输,只需将传递字节流改为存储字节流即可。
相关文章推荐
- ISA2006实现QQ离线文件正常发送接受的方法
- 做一个IOS聊天APP如何实现发送/预览文件的功能
- 如何判断一个静态库(.a文件)所支持的架构(平台)
- 如何让windows服务器IIS支持.apk/.ipa文件下载
- 如何让Linux SVN 支持 *.so *.a 等文件
- 如何查看内核支持的文件系统
- APK IPA --------------- iis7如何添加mime类型支持所有后缀名文件下载的方法(解决特殊后缀文件无法下载的问题)
- HDFS只支持文件append操作, 而依赖HDFS的HBase如何完成增删改查功能
- 如何让Apache和FMS视频流服务器支持微软的EFS加密文件
- 如何利用jgroups实现分布式环境下消息的接受和发送
- 如何在php设置支持大文件上传
- java中如何实现邮件的发送包括网页文件的发送
- 如何让windows服务器IIS支持.apk/.ipa文件下载
- iOS如何查看静态库.a文件是否支持i386?
- ubuntu11.04下如何发送文件到U盘如何添加发送文件到U盘的右键菜单
- 用Latex排版论文(1)如何将Visio画图文件转换成Latex支持的.eps文件
- 如何下载和离线安装Chrome的CRX扩展文件包
- 如何阻止通过Outlook用户发送带Winmail.dat文件附件的邮件
- iis7如何添加mime类型支持所有后缀名文件下载的方法(解决特殊后缀文件无法下载的问题)
- 如何下载和离线安装Chrome的CRX扩展文件包