-
今天一直在看xmpp协议相关的扩展协议文件 http://xmpp.org/extensions
想找更多的关于jingle的资料,搞明白了一些事情
之前有点奇怪,jingle可以用来传输数据,包括多媒体,文件共享等等
但socket5 bytestream也是实现这个功能,那xmpp协议同时要这两个扩展干嘛?只是提供更丰富的连接方式吗?
后来搞明白,socket5 bytestream和jingle是两个不同的概念
jingle主要的作用是利用ICE和STUN等技术实现点对点的连接的一种解决方案
而连接方式和传输内容是分离的,socket5 bytestream就是其中一种tcp的连接方式,另外还有UDP、in-band等方式
而内容也可以是各种数据,文件 多媒体数据等等
理论上不需要任何服务器的额外支持,也不需要像单纯的使用socket5 bytestream那样需要中转服务器
只需要两个客户端都支持jingle,就可以实现点对点传输
如果连不上的话也可以利用第三方的stun服务器进行连接
这里又多出一个概念In-Band,可以翻译成“带内”,和它对应的是 Out-Of-Band“带外”
http://xmpp.org/extensions/xep-0047.html
所谓In-Band就是把需要传输的数据转换成字节码的形式用Xmpp协议的形式比如 iq 或者 message节点发出去
就是用的XMPP协议走的通道传输附加数据,所以称为带内
而“带外”就是socket5 bytestream这种形式,先利用xmpp进行协商,然后另外去建立一个socket连接
进行数据传输,这种一般是利用第三方的proxy中转服务器,好处是不占用xmpp服务器的资源
因为大家都用In-Band方式来收发文件的话,会把XMPP服务器拖垮的
所以文档中写到
Generally, in-band bytestreams SHOULD be used only as a last resort. SOCKS5 Bytestreams will almost always be preferable.
A server MAY rate limit a connection, depending on the size and frequency of data packets.
A server MAY disconnect a connection that sends overly large packets as defined by server policy.
It is RECOMMENDED to use a 'block-size' of 4096.
看了一下gloox目录下有InBandBytestream相关的类,以及一个ibb_excample,一会试试看怎么样
现在我的程序文件传输基本上用socket5 bytestream解决了
接下来是语言了,刚刚和gloox协议库的开发者交流了一下,下一个版本正在开发中并将支持jingle
但是需要等到明年2月到5月才能发布
看了一下jingle那么多复杂的技术ICE STUN等等
要自己来实现有点不太可能了,而现在正在开发的gloox源码中虽然已经有了不少jingle相关的类
但听gloox开发者说目前还没法用
所以我想先试试看In-Band方式来实现试试传输语言数据吧
这样首先就放弃了和其他客户端的通用性,当然目前好像也只有gtalk支持jingle吧,
其他的客户端我看连文件传输都没怎么支持好
比如psi的文件发送居然不支持中转服务器,同样的也不支持jingle,照样发布的好好的
上次看到一篇文章说语言每秒钟能压缩到5K就够了
如果In-Band支持不了那么大流量的话也可以进行一些功能上的缩减
比如把实时的语音换成对讲机的形式,按住键说一句话,对方等传完的听完了再按住键回复一句话这样子
当然啦,如果In-Band实在没法支持也可以利用传输文件用的那些个服务器来进行数据中转
根据今天和别人手机对发消息的经验来看,速度还是不错的,GPRS本身速度也是个限制
但问题是延迟比较大,所以还是实时性会比较差