iOS--XMPP文件传输

来源:互联网 发布:淘宝网吸顶灯 编辑:程序博客网 时间:2024/06/08 19:42

IM一个项目中需要文件传输, 研究了 总结下

XEP-0096: File Transfer 传输文件的统一接口, 客户端之间用它来协商到底采用哪种具体的传输方式, 包括以下三种:

1.XEP-0047: In-Band ByteStreams 带内字节流, 这个协议可用于小数据量传输, 只是用字节流传输, (图片可以, 语音压缩好也可以).

带内, 顾名思义, 就是夹带在XML流中, 通过xmpp服务器中转传输, 具体用法是把数据用base64编码放在XML流传给对方. 此方法简单, 但是不好, base64编码效率低, 而且所有数据必须由服务器中转(字符串格式的数据中转)

2.XEP-0066:Out of Band Data 带外字节流, 带内走不通就走带外, 也就是不经过xmpp服务器. 这个用法在发起传输的客户端临时建立起一个htpp服务(当然也可以是别的服务), 把自己的ip和端口号, 通过xmpp消息, 告诉接收方, 让对方直接来下载. 但是这个方法有一个问题, 发送一方必须是公网ip, 否则对方无法访问. 注:目前Pandion, linq支持这个XEP

3.XEP-0065: Socket5 ByteStreams Socket5字节流, 使用SOCKET5传输文件, 有直连式和代理传输两种方式. 发送方把预定的ip和端口(通过xmpp消息)告诉给接收方. 如果双方在公网, 采用socket5 直接传输, 如果任何一方在内网, 经过socket5代理服务器传输, 发送方把代理服务器的ip和端口号告诉给接收方.  这里的socket5代理服务器和通用的代理服务器稍有差别, 因为他需要通过发送方提出的一个sessionID由xmpp服务器通知socket5服务器把双方的socket5通道连通, 也就是激活. 注: 目前Psi, Ling支持这个XEP.


最后项目采用的就是socket5代理服务器的传输, 虽然有些折腾, 效率还行. 

0 0