doc一.聊天软件背景
1.聊天软件,就是通常我们说的即时聊天工具IM,我们常用的聊天软件有QQ,微信,飞信等。
2.需要协议支持,传统的socket编程并不满足聊天的功能,比如服务器与客服端的双向交互,消息的双向推送。
3.在移动互联网时代,我们需要基于移动终端开发新型的聊天软件,以满总大众的需求,常用的移动设备终端操作系统ios,android,wp7等等。
二.技术背景
1.在开发Android和iPhone应用程序时,我们往往需要从服务器不定的向手机客户端即时推送各种通知消息,iPhone上已经有了比较简单的和完美的推送通知解决方案, 可是Android平台上实现起来却相对比较麻烦,最近利用几天的时间对Android的推送通知服务进行初步的研究。
在Android手机平台上,Google提供了C2DM(Cloudto Device Messaging)服务,起初我就是准备采用这个服务来实现自己手机上的推送功能。 Android Cloud to Device Messaging (C2DM)是一个用来帮助开发者从服务器向Android应用程序发送数据的服务。该服务提供了一个简单的 、轻量级的机制,允许服务器可以通知移动应用程序直接与服务器进行通信,以便于从服务器获取应用程序更新和用户数据。 C2DM服务负责处理诸如消息排队等事务并向运行于目标设备上的应用程序分发这些消息。 但是经过一番研究发现,这个服务存在很大的问题:
1)C2DM内置于Android的2.2系统上,无法兼容老的1.6到2.1系统;
2)C2DM需要依赖于Google官方提供的C2DM服务器,由于国内的网络环境,这个服务经常不可用,如果想要很好的使用, 我们的App Server必须也在国外,这个恐怕不是每个开发者都能够实现的; 有了上述两个使用上的制约,导致我最终放弃了这个方案,不过我想利用另外一篇文章来详细的介绍C2DM的框架以及客户端和App Server的相应设置方法,可以作为学习与参考之用。 即然C2DM无法满足我们的要求,那么我们就需要自己来实现Android手机客户端与App Server之间的通信协议,保证在App Server想向指定的Android设备发送消息时,Android设备能够及时的收到。下面我来介绍几种常见的方案:
1)轮询:应用程序应当阶段性的与服务器进行连接并查询是否有新的消息到达,你必须自己实现与服务器之间的通信,例如消息排队等。而且你还要考虑轮询的频率,如果太慢可能导致某些消息的延迟,如果太快,则会大量消耗网络带宽和电池。
2)SMS:在Android平台上,你可以通过拦截SMS消息并且解析消息内容来了解服务器的意图。这是一个不错的想法,我就见过采用这个方案的应用程序。这个方案的好处是,可以实现完全的实时操作。但是问题是这个方案的成本相对比较高,你很难找到免费的短消息发送网关,关于这个方案的实现,可以参考如下链接:https://labs.ericsson.com/apis/mobile-java-push/。
3)持久连接:这个方案可以解决由轮询带来的性能问题,但是还是会消耗手机的电池。Apple的推送服务之所以工作的很好,是因为每一台手机仅仅保持一个与服务器之间的连接,事实上C2DM也是这么工作的。不过这个方案也存在不足,就是我们很难在手机上实现一个可靠的服务。Android操作系统允许在低内存情况下杀死系统服务,所以你的通知服务很可能被操作系统Kill掉了。 前两个方案存在明显的不足,第三个方案也有不足,不过我们可以通过良好的设计来
三.开发协议
1.目前主流的四种IM(IM:instant messaging,即时消息)分别为: XMPP(Extensible Messageing and Presence Protocol:可扩展消息与存在协议); 即时信息和空间协议(IMPP); 空间和即时信息协议(PRIM); 针对即时通讯和空间平衡扩充的进程开始协议SIP(SIMPLE)。
2.在这四种协议中,XMPP是最灵活的。 XMPP是一种基于XML的协议,它继承了在XML环境中灵活的发展性。因此,基于XMPP的应用具有超强的可扩展性。 经过扩展以后的XMPP可以通过发送扩展的信息来处理用户的需求,以及在XMPP的顶端建立如内容发布系统和基于地址的服务等应用程 序。 而且,XMPP包含了针对服务器端的软件协议,使之能与另一个进行通话,这使得开发者更容易建立客户应用程序或给一个配好系统添加功能.
3.XMPP系统特点: (1)客户机/服务器通信模式; (2)分布式网络; (3)简单的客户端; (4)XML的数据格式。
三.协议的实现及开发工具包
1.android使用xmpp协议进行即时通信,所涉及3个主要的东西,它们是openfire、Asmack和spark,这三个东东结合起来就是完整的xmpp IM实现:
(1)基于java的开源XMPP协议包Asmack,在pc机上,有实现XMPP协议包smack,但在精简了jdk的android系统上,会出现一些类缺失, 但在2010年初,有人在code.google.com网站上发布了一个Asmack,其中A库就代表Android中的A,也就是说,这个版本是Smack的Android版本. 可使用下面地址下载Asmack. http://code.google.com/p/asmack/downloads/list
(2)openfire主要是作为服务器,负责管理客户端的通信连接,以及提供客户端一些通信信息和连接信息。
(3)Spark 是PC机上IM客户端的实现,其实就是使用了smack 的api实现的。
(4)官方下载:http://www.igniterealtime.org/downloads/index.jsp
四
。参看资料 http://www.apkbus.com/android-23750-1-1.html
转自:http://www.360doc.com/content/13/0401/12/1947337_275262697.shtml
相关推荐
### Android 5.0新特性终极猜想 随着Android 5.0发布日期的临近,业界内外对于这款新系统的猜测和期待日益高涨。基于已有的信息和行业趋势,我们可以从几个方面来推测Android 5.0可能带来的技术革新与用户体验升级...
**正文** 哥德巴赫猜想,是数学领域...总之,哥德巴赫猜想是一个挑战数学家智力的未解之谜,其代码实现仅能作为一种有限的验证手段,而非真正的证明。要彻底解决这个问题,还需要数学家们继续探索新的数学理论和技术。
哥德巴赫猜想是数学领域的一个著名未解决问题,它由普鲁士数学家克里斯蒂安·哥德巴赫在1742年提出。猜想陈述为:任何大于2的偶数都可以表示为两个质数(只能被1和自身整除的正整数)之和。这个猜想至今未被证明也未...
在C#编程语言中实现哥德巴赫猜想,主要是通过编写算法来验证该猜想是否成立。对于初学者来说,这是一个很好的实践项目,因为它涉及到基础的数学知识、编程逻辑以及数论的概念。 首先,我们需要理解什么是质数。质数...
在C++中实现回文数猜想程序,首先需要掌握基本的输入输出操作,如使用`std::cin`和`std::cout`处理用户输入和输出。然后,需要熟悉整数的运算,包括乘法和比较操作。程序的基本思路是遍历一定范围内的所有整数,对每...
在编程和算法实现的角度,歌德巴赫猜想的验证可以通过设计一种算法来尝试对所有大于2的偶数进行检验。下面我们将探讨几种可能的算法实现方法: 1. **穷举法**:最基础的方法是对每个偶数n(从4开始)进行遍历,检查...
### 哥德巴赫猜想及其C语言实现详解 #### 一、哥德巴赫猜想简介 哥德巴赫猜想是数学领域一个著名的未解决猜想,由德国数学家克里斯蒂安·哥德巴赫在1742年提出。该猜想可以表述为:任何大于2的偶数都可以表示为两...
哥德巴赫猜想 数据结构(C语言实现) 用C语言实现哥德巴赫猜想的数据结构!cpp文件。
哥德巴赫猜想是数学领域中的一个著名未解决问题,由18世纪的普鲁士数学家克里斯蒂安·哥德巴赫提出。这个猜想简单表述为:“每一个大于2的偶数都可以表示为两个质数之和。”尽管经过了几百年的努力,至今仍没有找到...
在C语言中实现哥德巴赫猜想的验证,通常会涉及以下知识点: 1. **基本数据类型与运算**:C语言中,我们通常使用整型变量来存储数值,如`int`或`long long`,因为我们要处理的数字可能很大,所以选择合适的类型很...
在本文中,我们将深入探讨如何使用C语言来实现歌德巴赫猜想的验证。歌德巴赫猜想是数学中的一个著名未解决问题,它提出:每一个大于2的偶数都可以表示为两个素数之和。这个猜想至今未被证明,但我们可以编写程序来...
标题中的"C++代码 角谷猜想计算过程"指的是利用C++编程语言实现角谷猜想的算法。角谷猜想,也称为“冰雹序列”或“3n+1猜想”,是由日本数学家角谷静夫提出的一个未解问题。这个猜想是这样的:对于任意一个正整数n,...
基于来自互联网的大量短对话数据,通过计算图框架Tensorflow实现基于Encoder-Decoder的LSTM网络单元模型生成式聊天机器人,并设计一款Android客户端聊天机器人软件,结果表明移动端聊天机器人的可行性和有效性。...
- **Binder**:用于实现进程间通信(IPC)的重要工具,是Android系统中实现远程服务调用的基础。 理解这些概念的背后逻辑和应用场景有助于更好地把握Android的设计思想。 #### 二、方法论探讨 研究Android的过程中...
5. 编程实现哥德巴赫猜想和孪生素数猜想的验证,包括程序设计思路和代码实现。 6. 数据可视化,如绘制素数分布图,以直观展示结果。 7. 对验证过程中遇到的问题和优化策略的讨论,比如如何提高搜索效率和避免重复...
这是一个基于C语言的哥德巴赫猜想,主要的思想是循环。
本项目是一个使用 JavaScript 实现哥德巴赫猜想验证的小作业。通过简单的 HTML 页面和 JavaScript 代码,用户可以输入一个偶数,程序会验证该偶数是否能被拆分为两个质数之和。哥德巴赫猜想是一个经典的数学问题,...
C语言是一种强大的、结构化的、过程式的编程语言,适合进行底层的系统编程和算法实现。在C语言中验证哥德巴赫猜想,我们需要编写一段程序,遍历所有大于2的偶数,并检查它们是否能被分解为两个质数的和。质数是大于1...
《黎曼猜想和素性测试》这篇论文深入探讨了数学领域中的两个重要概念:黎曼猜想和素性测试。这两个概念在密码学中扮演着至关重要的角色,特别是对于Rabin加密体制的发明者来说,他们之间的关联性是密码安全性的基石...
相反,应当从系统的设计意图开始,通过抽象思维和哲学的思考来理解系统设计的初衷,从最简单的系统原型和设计猜想开始,逐步深入理解Android的整体框架和主干流程。这样的方法可以帮助我们构建对整个Android架构的...