XMPP和即时通讯内容学习(一)

原创 2013年12月05日 00:50:37

一直听朋友们说xmpp,怎么好怎么流行,我也挺感兴趣,可是由于最近工作很忙,没有时间看,今天终于抽出时间研究了一下,首先是XMPP到底是什么?

XMPP是:是一种以XML为基础的开放式实时通信协议,是经由互联网工程工作小组(IETF)通过的互联网标准。XMPP因为被Google Talk应用而被广大网民所接触。

优点:

1、开放

XMPP协议是自由、开放、公开的,并且易于了解。而且在客户端服务器组件源码库等方面,都已经各自有多种实现。

2、标准

互联网工程工作小组(IETF)已经将Jabber的核心XML流协议以XMPP之名,正式列为认可的实时通信及Presence技术。而XMPP的技术规格已被定义在RFC 3920RFC 3921。任何IM供应商在遵循XMPP协议下,都可与Google Talk实现连接。
3、证实可用
第一个Jabber(现在XMPP)技术是Jeremie Miller在1998年开发的,现在已经相当稳定;数以百计的开发者为XMPP技术而努力。今日的互联网上有数以万计的XMPP服务器运作著,并有数以百万计的人们使用XMPP实时传讯软件。
4、分散式
XMPP网络的架构和电子邮件十分相像;XMPP核心协议通信方式是先创建一个stream,XMPP以TCP传递XML数据流,没有中央主服务器。任何人都可以运行自己的XMPP服务器,使个人及组织能够掌控他们的实时传讯体验。
5、安全
任何XMPP协议的服务器可以独立于公众XMPP网络(例如在企业内部网络中),而使用SASLTLS等技术的可靠安全性,已内置于核心XMPP技术规格中。
6、可扩展
XML命名空间的威力可使任何人在核心协议的基础上建造定制化的功能;为了维持通透性,常见的扩展由XMPP标准基金会
7、弹性佳
XMPP除了可用在实时通信的应用程序,还能用在网络管理、内容供稿、协同工具、文件共享、游戏、远程系统监控等。
8、多样性
用XMPP协议来建造及布署实时应用程序及服务的公司及开放源代码计划分布在各种领域;用XMPP技术开发软件,资源及支持的来源是多样的,使得使你不会陷于被“绑架”的困境。

缺点:

1、数据负载太重 
随着通常超过70%的XMPP协议的服务器的数据流量的存在和近60%的被重复转发,XMPP协议目前拥有一个大型架空中存在的数据提供给多个收件人。新的议定书正在研究,以减轻这一问题。(个人观点:一直不是很火的原因就是这个,希望早点改进)
2、没有二进制数据 
XMPP协议的方式被编码为一个单一的长的XML文件,因此无法提供修改二进制数据。因此, 文件传输协议一样使用外部的HTTP。如果不可避免,XMPP协议还提供了带编码的文件传输的所有数据使用的Base64。至于其他二进制数据加密会话(encrypted conversations)或图形图标(graphic icons)以嵌入式使用相同的方法。

有了上述的基本了解之后相信各位也有自己的主意,是否要看接下来的内容:

即时通讯(Instant Messenger),就是现在的QQ、MSN、Gtalk等软件都是即时通许软件。启动gtalk就是其中基于xmpp协议实现的一款即时通讯软件。但是开发一款这种软件还是任重而道远的。

实现XMPP 即时通许首要要了解openfire(服务端)、客户端(下载潘迪安、spark、如意通等软件,前期辅助学习)、smack(它实现了xmpp的协议)。上述如何使用和配置我就不多讲了,可以访问如下:

     http://www.cnblogs.com/xiaodao/archive/2013/04/05/3000554.html 或 http://blog.csdn.net/shimiso/article/details/8816558(感谢内容提供者,我也是跟着他们学习,加以总结,加深自己的印象,把自己遇到问题的地方和大家分享一下)。

     现在我相信同学都做好了相应的配置了,直接进入正题:

      我用的mac本,潘迪安和如意通我是不用想了,我下载是spark。然后进入openfire的管理端

选择用户/组,然后选择新建用户(同学们的数据都做关联了吧),出了管理员之外在建立两个用户:


然后打开spark,登陆界面如下:输入你的用户名和密码(各位不要选择自动登陆啊,否则你要改服务器和用户名的时候就有你头疼的了):


点击spark的高级,做如下配置:


确定之后你就可以登陆了。如果登陆不了可能有两个原因:

第一:数据库没起

第二:openfire没起(注:openfire在mac自动启动,建议每次想用的时候都重启了,会避免很多问题,如后管无法登陆,新建用户不生效等问题就出必杀:重启)。

接下来用Eclipse建立一个java的工程,细节不多说了,代码如下:


ConnectionConfiguration connectionConfig = new ConnectionConfiguration("127.0.0.1", Integer.parseInt("5222"),"127.0.0.1");

// 允许自动连接

connectionConfig.setReconnectionAllowed(true);

connectionConfig.setSendPresence(true);

Connection connection = new XMPPConnection(connectionConfig);

try {

connection.connect();// 开启连接

} catch (XMPPException e) {

throw new IllegalStateException(e);

}

  connection.login("bjsujb1", "123456"); //第二个用户和密码

  System.out.println(connection.getUser());   

  connection.getChatManager().createChat("bjsujb@127.0.0.1",null).sendMessage("Hello word!"); 

ConnectionConfiguration这个类初始化的时候三个参数分辨为第一个:服务器地址 第二个:对应端口号  第三个:代理服务器地址(可不写,展示也可随便写)。

现在代码你会发现spark收到了一条bjsujb1所发来的消息,内容是Hello word


相关文章推荐

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

XMPP学习教程

一、说明: XMPP简单教程,从自己搭建服务器,到实现简单XMPP协议的通讯。 此博文参考了以下文章,在此表示感谢: http://www.cnblogs.com/cokecoffe/archive/...

XMPP协议学习笔记

一、定义        XMPP 是一种很类似于http协议的一种数据传输协议,它的过程就如同“解包装--〉包装”的过程,用户只需要明白它接受的类型,并理解它返回的类型,就可以很好的利用xmpp来进行...

XMPP入门

本人原创,更多xmpp知识、ios知识、其他分享知识见:我的个人博客 简介: 1、XMPP是可扩展消息与存在协议,主要用于im。 2、他是一种类似于http协议的数据传输协议...

Android基于XMPP Smack Openfire下学习开发IM(四)单人聊天和多人聊天(发送消息、接收消息)

很久没有写博客了,回顾了一下原先学习的,接着没有写完的继续写咯。(ps:告诉大家一个秘密,其实写写博客对自己的帮助是非常大的哦~) 好了废话不多说,进入主题吧。 一、单人聊天 1)发送消息: 首先...
  • h7870181
  • h7870181
  • 2013年10月09日 11:58
  • 34908

xmppframework 群聊功能简单实现

1、下载xmppframework(googol一下就出来了) 2、导入的工程
  • zps007
  • zps007
  • 2014年05月12日 14:32
  • 6254

(iOS)基于XMPP协议的简单IM实现

基于XMPP协议的简单IM实现(iOS)(含Demo) 分类: IOS-XMPP协议学习2013-04-27 16:44 1216人阅读 评论(16) 收藏 举报 iOSXMPPI...

XMPP学习教程

原文链接:http://blog.csdn.net/jiajiayouba/article/details/44755385 一、说明: XMPP简单教程,从自己搭建服务器,到实现简单...
  • shaoswc
  • shaoswc
  • 2016年06月20日 09:56
  • 188

一个很好的讲解xmpp和bosh的教程

http://www.ibm.com/developerworks/cn/xml/tutorials/x-realtimeXMPPtut/index.html

iOS XMPPFramework教程

XMPPFramework是一个OS X/iOS平台的开源项目,使用Objective-C实现了XMPP协议(RFC-3920),同时还提供了用于读写XML的工具,大大简化了基于XMPP的通信应用的开...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:XMPP和即时通讯内容学习(一)
举报原因:
原因补充:

(最多只允许输入30个字)