macxmpp服务器搭建
1. 怎么实现服务器给android客户端主动推送消息
一、消息推送基础
消息推送,就是在互联网上通过定期传送用户需要的信息来减少信息过载的一项新技术。推送技术通过自动传送信息给用户,来减少用于网络上搜索的时间。它根据用户的兴趣来搜索、过滤信息,并将其定期推给用户,帮助用户高效率地发掘有价值的信息
当我们开发需要和服务器交互的移动应用时,基本上都需要和服务器进行交互,包括上传数据到服务器,同时从服务器上获取数据。
一般情况下,客户端与服务器之间通讯客户端是主动的,但这就存在一个问题就是一旦服务器数据有更新或者服务器要下发通知给客户端只能等客户端连接的时候才能实现。这种方式使消息失去了实时性。
如何使客户端能够实时的收到服务器的消息和通知,总体来说有两种方式,第一种是客户端使用Pull(拉)的方式,就是隔一段时间就去服务器上获取一下信息,看是否有更新的信息出现。第二种就是 服务器使用Push(推送)的方式,当服务器端有新信息了,则把最新的信息Push到客户端上。这样,客户端就能自动的接收到消息。
虽然Pull和Push两种方式都能实现获取服务器端更新信息的功能,但是明显来说Push方式比Pull方式更优越。因为Pull方式更费客户端的网络流量,更主要的是费电量,还需要我们的程序不停地去监测服务端的变化。
二、几种常见的解决方案实现原理
1)轮询(Pull)方式:客户端定时向服务器发送询问消息,一旦服务器有变化则立即同步消息。
2)SMS(Push)方式:通过拦截SMS消息并且解析消息内容来了解服务器的命令,但这种方式一般用户在经济上很难承受。
3)持久连接(Push)方式:客户端和服务器之间建立长久连接,这样就可以实现消息的及时行和实时性。
三、消息推送解决方案概述
A、C2DM云端推送方案
在Android手机平台上,Google提供了C2DM(Cloudto Device Messaging)服务。Android Cloud to Device Messaging (C2DM)是一个用来帮助开发者从服务器向Android应用程序发送数据的服务。该服务提供了一个简单的、轻量级的机制,允许服务器可以通知移动应用程序直接与服务器进行通信,以便于从服务器获取应用程序更新和用户数据。
该方案存在的主要问题是C2DM需要依赖于Google官方提供的C2DM服务器,由于国内的网络环境,这个服务经常不可用。
B、MQTT协议实现Android推送
采用MQTT协议实现Android推送功能也是一种解决方案。MQTT是一个轻量级的消息发布/订阅协议,它是实现基于手机客户端的消息推送服务器的理想解决方案。
wmqtt.jar 是IBM提供的MQTT协议的实现。我们可以从这里(https://github.com/toku/AndroidPushNotificationsDemo)下载该项目的实例代码,并且可以找到一个采用php书写的服务器端实现(https://github.com/toku/PhpMQTTClient)。
C、RSMB实现推送功能
Really Small Message Broker (RSMB) ,是一个简单的MQTT代理,同样由IBM提供,其查看地址是:http://www.alphaworks.ibm.com/tech/rsmb。缺省打开1883端口,应用程序当中,它负责接收来自服务器的消息并将其转发给指定的移动设备。SAM是一个针对MQTT写的PHP库。我们可以从这个http://pecl.php.net/package/sam/download/0.2.0地址下载它.
D、XMPP协议实现Android推送
Google官方的C2DM服务器底层也是采用XMPP协议进行的封装。XMPP(可扩展通讯和表示协议)是基于可扩展标记语言(XML)的协议,它用于即时消息(IM)以及在线探测。这个协议可能最终允许因特网用户向因特网上的其他任何人发送即时消息。
androidpn是一个基于XMPP协议的java开源Android push notification实现。它包含了完整的客户端和服务器端。但也存在一些不足之处:
1) 比如时间过长时,就再也收不到推送的信息了。
2)性能上也不够稳定。
3)如果将消息从服务器上推送出去,就不再管理了,不管消息是否成功到达客户端手机上。
如果我们要使用androidpn,则还需要做大量的工作,需要理解XMPP协议、理解Androidpn的实现机制,需要调试内部存在的BUG。
E、使用第三方平台
目前国内、国外有一些推送平台可供使用,但是涉及到收费问题、保密问题、服务质量问题、扩展问题等等,又不得不是我们望而却步。
四、消息推送完美方案
综合以上论述,在建立Android消息推送方面可谓方案多多,但每一款方案都有其优缺点。但无论如何,还是自己搭建一个推送平台是上策。因为你有、他有不如自己有。
举个例子,在搭建自有推送平台上建议使用《某某Android消息推送组件》。该组不仅可以拿来即用,并且还可以提供源码以便扩展,实现自己的特殊需求。
A、推送原理
Android消息推送组件基于XMPP协议实现Android推送。XMPP(可扩展通讯和表示协议)是基于可扩展标记语言(XML)的协议,它用于即时消息(IM)以及在线探测。这个协议可能最终允许因特网用户向因特网上的其他任何人发送即时消息。
2. java可以搭建im即时通讯吗
是的,Java可以用来构建即时通讯(IM)应用程序。Java是一种流行的编程语言,拥有许多开发框架和库,可以帮助开发者快速构建IM应用程序。
一些Java库和框架可以用于构建IM应用程序,例如:
Netty:一个异步事件驱动的网络应用程序框架,可以用于构建高性能的IM服务器。
Smack:一个用于XMPP协议的Java库,可以用于构建XMPP即时通讯客户端。
Openfire:一个用于XMPP协议的即时通讯服务器,可以与Smack一起使用以构建IM应用程序。
Apache MINA:一个灵活且可扩展的网络应用程序框架,可用于构建各种类型的网络应用程序,包括IM应用程序。
总之,Java提供了丰富的开发册纯工具和悉正库,可以睁姿悔帮助开发人员构建功能强大的即时通讯应用程序。
3. php鍗虫椂阃氲鏄镐庝箞鎼寤虹殑锛熸湁娌℃湁鐭ラ亾镄勶纻
鍗虫椂阃氲镄勬牳蹇冨湪浜嶹ebSocket锛屽畠鏄瀹炵幇鍗虫椂阃氲镄勫父鐢ㄥ岗璁涔嬩竴锛屽师鐞嗘槸鍦ㄥ崟涓猅CP杩炴帴涓婃彁渚涘弻钖戦氢俊镄勫岗璁锛岄氩父琚鐢ㄤ簬瀹炴椂阃氢俊銆佹父鎴忋佸湪绾夸氦鏄撶瓑鍦烘櫙銆
浼犵粺镄刉eb搴旂敤绋嫔簭鏄锘轰簬HTTP鍗忚镄勶纴HTTP鏄涓绉嶆棤鐘舵佸岗璁锛屾疮娆¤锋眰閮介渶瑕侀吨鏂板缓绔嬭繛鎺ワ纴锲犳ら毦浠ュ疄鐜板疄镞堕氢俊銆傝学ebSocket鍗忚阃氲繃鍦ㄥ缓绔嬭繛鎺ュ悗淇濇寔闀胯繛鎺ワ纴鍏佽告湇锷″櫒涓诲姩钖戝㈡埛绔鍙戦佹暟鎹锛屼粠钥屽疄鐜板弻钖戦氢俊銆
WebSocket鍗忚鍏佽稿湪链嶅姟鍣ㄧ鍜屽㈡埛绔涔嬮棿鍙戦佷换镒忔暟鎹锛屽寘𨰾鏂囨湰銆佷簩杩涘埗鏁版嵁銆丣SON绛夋牸寮忕殑鏁版嵁銆傚㈡埛绔鍜屾湇锷″櫒绔閮藉彲浠ュ彂阃佹暟鎹锛岃屼笖涓嶉渶瑕侀氲繃HTTP镄勪腑闂村眰杩涜岃浆鎹锛屼粠钥屽噺灏戜简缃戠粶寤惰繜鍜屽甫瀹界殑娑堣椼
瑕佹惌寤篜HP鍗虫椂阃氲绯荤粺锛屽彲浠ラ伒寰浠ヤ笅姝ラわ细
阃夋嫨WebSocket链嶅姟鍣锛氲佸疄鐜板嵆镞堕氲锛岄渶瑕佷娇鐢╓ebSocket鍗忚锛屾墍浠ラ渶瑕侀夋嫨涓涓鏀鎸乄ebSocket镄勬湇锷″櫒锛屼緥濡侼ode.js銆丼ocket.io銆丷atchet绛夈
瀹夎呮湇锷″櫒锛氭牴鎹镓阃夋湇锷″櫒镄勫畼鏂规枃妗o纴瀹夎匴ebSocket链嶅姟鍣ㄣ
缂栧啓瀹㈡埛绔椤甸溃锛氩湪PHP涓锛屽彲浠ヤ娇鐢╓ebSocket瀹㈡埛绔搴揿俣atchet鍜宲hpws绛夋潵鍒涘缓瀹㈡埛绔椤甸溃銆傚彲浠ュ弬钥冨畼鏂规枃妗e拰绀轰緥浠g爜銆
瀹炵幇链嶅姟绔阃昏緫锛氩疄鐜痒ebSocket链嶅姟鍣ㄧ镄勯昏緫锛屼緥濡傚勭悊瀹㈡埛绔鍙戦佺殑娑堟伅銆佸皢娑堟伅鍙戦佺粰鍏朵粬瀹㈡埛绔绛夈傚叿浣揿疄鐜板彲浠ユ牴鎹镓阃夋湇锷″櫒镄勬枃妗e拰绀轰緥浠g爜𨱒ヨ繘琛屻
闆嗘垚鍓岖鍜屽悗绔锛氩皢瀹㈡埛绔鍜屾湇锷$阃昏緫闆嗘垚鍒板悓涓涓搴旂敤绋嫔簭涓锛屽彲浠ヤ娇鐢ㄦ嗘灦濡侺aravel鎴朤hinkPHP绛夛纴鎴栬呰嚜琛岀紪鍐欎唬镰併
浠ヤ笅鏄涓浜涘︿範PHP鍗虫椂阃氲镄勮祫鏂欙纴杩欎簺璧勬枡鍙浠ュ府锷╀綘鍏ラ棬锛
Ratchet瀹樻柟鏂囨。锛歊atchet鏄涓涓狿HP WebSocket搴掳纴鍙浠ョ敤𨱒ユ瀯寤哄嵆镞堕氲搴旂敤绋嫔簭銆傚畼鏂规枃妗f彁渚涗简璇︾粏镄勪娇鐢ㄨ存槑鍜岀ず渚嬩唬镰併
PHP WebSockets锛氲繖鏄涓涓浣跨敤PHP缂栧啓镄刉ebSocket链嶅姟鍣ㄦ嗘灦锛屽畠镄勭洰镙囨槸鎻愪緵涓涓绠鍗旷殑鏂规硶𨱒ユ瀯寤哄疄镞跺簲鐢ㄧ▼搴忋傚畠鎻愪緵浜嗗畬鏁寸殑绀轰緥浠g爜鍜屾枃妗c
WebSocket PHP镵婂ぉ瀹ゆ暀绋嬶细杩欐槸涓涓璇︾粏镄勬暀绋嬶纴浠嬬粛浜嗗备綍浣跨敤PHP鍜学ebSocket𨱒ユ瀯寤轰竴涓绠鍗旷殑镵婂ぉ瀹ゅ簲鐢ㄧ▼搴忋傚畠鎻愪緵浜嗗畬鏁寸殑绀轰緥浠g爜鍜屾紨绀恒
PHP镵婂ぉ搴旂敤绋嫔簭鏁欑▼锛氲繖鏄涓涓杈冧负鍏ㄩ溃镄勬暀绋嬶纴浠嬬粛浜嗗备綍浣跨敤PHP鍜孧ySQL𨱒ユ瀯寤轰竴涓瀹屾暣镄勮亰澶╁簲鐢ㄧ▼搴忥纴鍖呮嫭锏诲綍銆佹敞鍐屻佽亰澶╁ょ瓑锷熻兘銆傚畠鎻愪緵浜嗗畬鏁寸殑绀轰緥浠g爜鍜屾紨绀恒
Real-time Apps with PHP锛氲繖鏄涓链浠嬬粛濡备綍浣跨敤PHP鏋勫缓瀹炴椂搴旂敤绋嫔簭镄勪功绫嶏纴娑电洊浜哤ebSocket銆丼ocket.io銆丯ode.js銆丷edis绛夋妧链銆傝槠铹惰繖链涔︾殑涓昏佽瑷鏄鑻辫锛屼絾瀹冩彁渚涗简澶ч噺镄勭ず渚嬩唬镰佸拰鏂囨。锛屽彲浠ュ府锷╀綘蹇阃熷叆闂ㄣ
浠ヤ笂杩欎簺璧勬枡鍙浠ュ府锷╀綘蹇阃熷叆闂≒HP鍗虫椂阃氲镄勫紑鍙戯纴寤鸿浣犲厛阃夋嫨涓绉嶈缉涓虹亩鍗旷殑瀹炵幇鏂规硶寮濮嫔︿範锛岄愭ユ帉鎻$浉鍏虫妧链鍜屽紑鍙戠粡楠屻
4. 想开发一款安卓社交类的APP需要有哪些准备
1. 应用设计:需要有符合社交应用风格的UI设计和用户体验,可和搜考虑UI设计工具,例如Sketch、Adobe XD等软件。
2. 数据库:需要一个稳定的、高效的数据库来存储用户信息、聊天记录、群组信息等。你可以考虑使用开源数据库,也可选择与服务器框架捆绑提供的MySQL服务器。
3. 服务器:为了支持APP的基本功能,要搭建服务器提供API,完成用户注册,验证,获取信息、聊天、发帖等功誉戚能,若无合适的服务器搭建经验,可使唤虚历用云服务器管理软件如 AWS,阿里云等平台。
4. 账号系统:需要开发一个稳定的账号系统来支持账号注册、登录、密码修改、个人资料修改等功能。
5. 即时通讯功能:社交应用离不开即时通讯功能,例如实时聊天、约见、分享等,需要使用即时通讯协议来实现,如XMPP。
6. 定位服务:社交应用常常需要使用定位功能,如附近的人、地图导航等,需要使用GPS或其他依据地理位置的服务。
以上是基础需求,可能还需要考虑支付系统、广告、与其他应用的配合等等,具体需求取决于应用的功能和规模。
5. 寰淇℃槸锘轰簬xmpp鍗忚镄勪箞 鎴栬呰翠粠涓寰楀埌浜嗗惎绀轰箞
QQ寰淇¤繖浜涢兘鐢ㄧ殑镊宸辩殑鍗忚锛岃屼笖涓崭细鍏寮銆
瀵逛簬灏忎竴镣圭殑鍏鍙告兂瑕佸疄鐜板疄镞惰亰澶╋纴涓寮濮嬩粠XMPP锅氲捣鏄涓嶉敊镄勯夋嫨銆傚洜涓哄畠鏄涓涓鍏寮镄勬爣鍑嗭纴鍙堟湁寰埚氩紑婧愮殑瀹炵幇锛屾瘆濡备綘鎻愬埌镄凮penfire, aSmack鍜孹MPPFramework锛屽彲浠ヨ姳璐硅缉灏戠殑寮鍙戦噺锛屽氨鍙浠ユ惌寤哄嚭涓濂楄缮绠楀ソ鐢ㄧ殑瀹炴椂镵婂ぉ鏂规堛
璧锋ヤ箣钖庯纴浣犱细𨱍宠佹坊锷犳洿澶氱殑锷熻兘锛孹MPP链夊緢澶氭墿灞曪纴寰埚氶渶姹傞兘鑳芥弧瓒炽备竴鑸𨱒ヨ达纴瑕佸仛镄勪骇鍝侀兘鏄链嶅姟鍣ㄣ佸㈡埛绔閮界敱镊宸辨帉鎺э纴涓嶉渶瑕佸拰鍏朵粬镄勫巶鍟嗙殑镵婂ぉ链嶅姟鍣/瀹㈡埛绔浜掕仈浜挜氾纴镓浠ヤ箣钖庡彲浠ユ参鎱㈠湪XMPP涓婂姞鍏ヨ嚜宸辩殑镓╁𪾢锛岀敋镊虫槸涓浜涘垹鏀癸纸锲犱负XMPP閲岄溃涓嶅皯链哄埗鏄涓轰简阃傚簲涓嶅悓鍏鍙哥殑缁勪欢锛夈备簬鏄娓愭笎镄勶纴链钖庝娇鐢ㄧ殑鍗忚鍙鑳藉凡缁忓拰镙囧嗳镄刋MPP涓崭竴镙蜂简锛屾垚浜呜嚜宸辩殑鍗忚銆
杩欐牱浠岭MPP涓婃紨杩涘嚭𨱒ョ殑鍗忚锛岃槠铹跺叿浣揿疄鐜板拰XMPP鍙鑳界浉宸涓嶅皯锛屼絾鏄锘烘湰镐濇兂鍜屽师鐞嗗张涓岭MPP涓镊淬傜浉姣旇嚜宸变粠澶磋捐″嚭涓濂楀叏鏂扮殑鍗忚锛屽熀浜庤繖镙蜂竴濂楃粡杩囨棤鏁伴”鐩钥冮獙杩囩殑鍗忚锛屾樉铹跺规槗寰楀氾纴椋庨橹涔熻佸皬寰楀氥
6. GitHub上面有哪些经典的java框架源码
Bazel:来自Google的构建工具,可以快速、可靠地构建代码。官网
Gradle:使用Groovy(非XML)进行增量构建,可以很好地与Maven依赖管理配合工作。官网
Buck:Facebook构建工具。官网
ASM:通用底层字节码操作和分析开发库。官网
Byte Buddy:使用流式API进一步简化字节码生成。官网
Byteman:在运行时通过DSL(规则)操作字节码进行测试和故障排除。官网
Javassist:一个简化字节码编辑尝试。官网
Apache Aurora:Apache Aurora是一个Mesos框架,用于长时间运行服务和定时任务(cron job)。官网
Singularity:Singularity是一个Mesos框架,方便部署和操作。它支持Web Service、后台运行、调度作业和一次性任务。官网
Checkstyle:代码编写规范和标准静态分析工具。官网
Error Prone:将常见编程错误作为运行时错误报告。官网
FindBugs:通过字节码静态分析查找隐藏bug。官网
jQAssistant:使用基于Neo4J查询语言进行代码静态分析。官网
PMD:对源代码分析查找不良的编程习惯。官网
SonarQube:通过插件集成其它分析组件,对过去一段时间内的数据进行统计。官网
ANTLR:复杂的全功能自顶向下解析框架。官网
JavaCC:JavaCC是更加专门的轻量级工具,易于上手且支持语法超前预测。官网
config:针对JVM语言的配置库。官网
owner:减少冗余配置属性。官网
Choco:可直接使用的约束满足问题求解程序,使用了约束规划技术。官网
JaCoP:为FlatZinc语言提供了一个接口,可以执行MiniZinc模型。官网
OptaPlanner:企业规划与资源调度优化求解程序。官网
Sat4J:逻辑代数与优化问题最先进的求解程序。官网
Bamboo:Atlassian解决方案,可以很好地集成Atlassian的其他产品。可以选择开源许可,也可以购买商业版。官网
CircleCI:提供托管服务,可以免费试用。官网
Codeship:提供托管服务,提供有限的免费模式。官网
fabric8:容器集成平台。官网
Go:ThoughtWork开源解决方案。官网
Jenkins:支持基于服务器的部署服务。官网
TeamCity:JetBrain的持续集成解决方案,有免费版。官网
Travis:通常用作开源项目的托管服务。官网
Buildkite: 持续集成工具,用简单的脚本就能设置pipeline,而且能快速构建,可以免费试用。官网
uniVocity-parsers:速度最快功能最全的CSV开发库之一,同时支持TSV与固定宽度记录的读写。官网
Apache Phoenix:HBase针对低延时应用程序的高性能关系数据库层。官网
Crate:实现了数据同步、分片、缩放、复制的分布式数据存储。除此之外还可以使用基于SQL的语法跨集群查询。官网
Flyway:简单的数据库迁移工具。官网
H2:小型SQL数据库,以可以作为内存数据库使用着称。官网
HikariCP:高性能JDBC连接工具。官网
JDBI:便捷的JDBC抽象。官网
Protobuf:Google数据交换格式。官网
SBE:简单二进制编码,是最快速的消息格式之一。官网
Wire:整洁轻量级协议缓存。官网
Apache DeltaSpike:CDI扩展框架。官网
Dagger2:编译时注入框架,不需要使用反射。官网
Guice:可以匹敌Dagger的轻量级注入框架。官网
HK2:轻量级动态依赖注入框架。官网
ADT4J:针对代数数据类型的JSR-269代码生成器。官网
AspectJ:面向切面编程(AOP)的无缝扩展。官网
Auto:源代码生成器集合。官网
DCEVM:通过修改JVM在运行时支持对已加载的类进行无限次重定义。官网
HotswapAgent:支持无限次重定义运行时类与资源。官网
Immutables:类似Scala的条件类。官网
JHipster:基于Spring Boot与AngularJS应用程序的Yeoman源代码生成器。官网
JRebel:无需重新部署,可以即时重新加载代码与配置的商业软件。官网
Lombok:减少冗余的代码生成器。官网
Spring Loaded:类重载代理。官网
vert.x:多语言事件驱动应用框架。官网
Akka:用来编写分布式容错并发事件驱动应用程序的工具和运行时。官网
Apache Storm:实时计算系统。官网
Apache ZooKeeper:针对大型分布式系统的协调服务,支持分布式配置、同步和名称注册。官网
Hazelcast:高可扩展内存数据网格。官网
Hystrix:提供延迟和容错。官网
JGroups:提供可靠的消息传递和集群创建的工具。官网
Orbit:支持虚拟角色(Actor),在传统角色的基础上增加了另外一层抽象。官网
Quasar:为JVM提供轻量级线程和角色。官网
Apache Cassandra:列式数据库,可用性高且没有单点故障。官网
Apache HBase:针对大数据的Hadoop数据库。官网
Druid:实时和历史OLAP数据存储,在聚集查询和近似查询方面表现不俗。官网
Infinispan:针对缓存的高并发键值对数据存储。官网
Bintray:发布二进制文件版本控制工具。可以于Maven或Gradle一起配合使用。提供开源免费版本和几种商业收费版本。官网
Central Repository:最大的二进制组件仓库,面向开源社区提供免费服务。Apache Maven默认使用Central官网Repository,也可以在所有其他构建工具中使用。
IzPack:为跨平台部署建立创作工具(Authoring Tool)。官网
JitPack:打包GitHub仓库的便捷工具。可根据需要构建Maven、Gradle项目,发布可立即使用的组件。官网
Launch4j:将JAR包装为轻量级本机Windows可执行程序。官网
Nexus:支持代理和缓存功能的二进制管理工具。官网
packr:将JAR、资源和JVM打包成Windows、Linux和Mac OS X本地发布文件。官网
Apache POI:支持OOXML规范(XLSX、DOCX、PPTX)以及OLE2规范(XLS、DOC、PPT)。官网
documents4j:使用第三方转换器进行文档格式转换,转成类似MS Word这样的格式。官网
jOpenDocument:处理OpenDocument格式(由Sun公司提出基于XML的文档格式)。官网
Cyclops:支持一元(Monad)操作和流操作工具类、comprehension(List语法)、模式匹配、trampoline等特性。官网
Fugue:Guava的函数式编程扩展。官网
Functional Java:实现了多种基础和高级编程抽象,用来辅助面向组合开发(composition-oriented development)。官网
Javaslang:一个函数式组件库,提供持久化数据类型和函数式控制结构。官网
jOOλ:旨在填补Java 8 lambda差距的扩展,提供了众多缺失的类型和一组丰富的顺序流API。官网
jMonkeyEngine:现代3D游戏开发引擎。官网
libGDX:全面的跨平台高级框架。官网
LWJGL:对OpenGL/CL/AL等技术进行抽象的健壮框架。官网
JavaFX:Swing的后继者。官网
Scene Builder:开发JavaFX应用的可视化布局工具。官网
Agrona:高性能应用中常见的数据结构和工具方法。官网
Disruptor:线程间消息传递开发库。官网
fastutil:快速紧凑的特定类型集合(Collection)。官网
GS Collections:受Smalltalk启发的集合框架。官网
HPPC:基础类型集合。官网
Javolution:实时和嵌入式系统的开发库。官网
JCTools:JDK中缺失的并发工具。官网
Koloboke:Hash set和hash map。官网
Trove:基础类型集合。官网
High-scale-bli:Cliff Click 个人开发的高性能并发库官网
Eclipse:老牌开源项目,支持多种插件和编程语言。官网
IntelliJ IDEA:支持众多JVM语言,是安卓开发者好的选择。商业版主要针对企业客户。官网
NetBeans:为多种技术提供集成化支持,包括Java SE、Java EE、数据库访问、HTML5
Imgscalr:纯Java 2D实现,简单、高效、支持硬件加速的图像缩放开发库。官网
Picasso:安卓图片下载和图片缓存开发库。官网
Thumbnailator:Thumbnailator是一个高质量Java缩略图开发库。官网
ZXing:支持多种格式的一维、二维条形码图片处理开发库。官网
im4java: 基于ImageMagick或GraphicsMagick命令行的图片处理开发库,基本上ImageMagick能够支持的图片格式和处理方式都能够处理。官网
Apache Batik:在Java应用中程序以SVG格式显示、生成及处理图像的工具集,包括SVG解析器、SVG生成器、SVG DOM等模块,可以集成使用也可以单独使用,还可以扩展自定义的SVG标签。官网
Genson:强大且易于使用的Java到JSON转换开发库。官网
Gson:谷歌官方推出的JSON处理库,支持在对象与JSON之间双向序列化,性能良好且可以实时调用。官网
Jackson:与GSON类似,在频繁使用时性能更佳。官网
LoganSquare:基于Jackson流式API,提供对JSON解析和序列化。比GSON与Jackson组合方式效果更好。官网
Fastjson:一个Java语言编写的高性能功能完善的JSON库。官网
Kyro:快速、高效、自动化的Java对象序列化和克隆库。官网
JDK 9:JDK 9的早期访问版本。官网
OpenJDK:JDK开源实现。官网
Scala:融合了面向对象和函数式编程思想的静态类型编程语言。官网
Groovy:类型可选(Optionally typed)的动态语言,支持静态类型和静态编译。目前是一个Apache孵化器项目。官网
Clojure:可看做现代版Lisp的动态类型语言。官网
Ceylon:RedHat开发的面向对象静态类型编程语言。官网
Kotlin:JetBrain针对JVM、安卓和浏览器提供的静态类型编程语言。官网
Xtend:一种静态编程语言,能够将其代码转换为简洁高效的Java代码,并基于JVM运行。官网
Apache Log4j 2:使用强大的插件和配置架构进行完全重写。官网
kibana:分析及可视化日志文件。官网
Logback:强健的日期开发库,通过Groovy提供很多有趣的选项。官网
logstash:日志文件管理工具。官网
Metrics:通过JMX或HTTP发布参数,并且支持存储到数据库。官网
SLF4J:日志抽象层,需要与具体的实现配合使用。官网
Apache Flink:快速、可靠的大规模数据处理引擎。官网
Apache Hadoop:在商用硬件集群上用来进行大规模数据存储的开源软件框架。官网
Apache Mahout:专注协同过滤、聚类和分类的可扩展算法。官网
Apache Spark:开源数据分析集群计算框架。官网
DeepDive:从非结构化数据建立结构化信息并集成到已有数据库的工具。官网
Deeplearning4j:分布式多线程深度学习开发库。官网
H2O:用作大数据统计的分析引擎。官网
Weka:用作数据挖掘的算法集合,包括从预处理到可视化的各个层次。官网
QuickML:高效机器学习库。官网、GitHub
Aeron:高效可扩展的单播、多播消息传递工具。官网
Apache ActiveMQ:实现JMS的开源消息代理(broker),可将同步通讯转为异步通讯。官网
Apache Camel:通过企业级整合模式(Enterprise Integration Pattern EIP)将不同的消息传输API整合在一起。官网
Apache Kafka:高吞吐量分布式消息系统。官网
Hermes:快速、可靠的消息代理(Broker),基于Kafka构建。官网
JBoss HornetQ:清晰、准确、模块化,可以方便嵌入的消息工具。官网
JeroMQ:ZeroMQ的纯Java实现。官网
Smack:跨平台XMPP客户端函数库。官网
Openfire:是开源的、基于XMPP、采用Java编程语言开发的实时协作服务器。 Openfire安装和使用都非常简单,并可利用Web界面进行管理。官网GitHub
Spark:是一个开源,跨平台IM客户端。它的特性支持集组聊天,电话集成和强大安全性能。如果企业内部部署IM使用Openfire+Spark是最佳的组合。官网GitHub
Tigase: 是一个轻量级的可伸缩的 Jabber/XMPP 服务器。无需其他第三方库支持,可以处理非常高的复杂和大量的用户数,可以根据需要进行水平扩展。官网
Design Patterns:实现并解释了最常见的设计模式。官网
Jimfs:内存文件系统。官网
Lanterna:类似curses的简单console文本GUI函数库。官网
LightAdmin:可插入式CRUD UI函数库,可用来快速应用开发。官网
OpenRefine:用来处理混乱数据的工具,包括清理、转换、使用Web Service进行扩展并将其关联到数据库。官网
RoboVM:Java编写原生iOS应用。官网
Quartz:强大的任务调度库.官网
AppDynamics:性能监测商业工具。官网
JavaMelody:性能监测和分析工具。官网
Kamon:Kamon用来监测在JVM上运行的应用程序。官网
New Relic:性能监测商业工具。官网
SPM:支持对JVM应用程序进行分布式事务追踪的性能监测商业工具。官网
Takipi:产品运行时错误监测及调试商业工具。官网
JNA:不使用JNI就可以使用原生开发库。此外,还为常见系统函数提供了接口。官网
Apache OpenNLP:处理类似分词等常见任务的工具。官网
CoreNLP:斯坦佛CoreNLP提供了一组基础工具,可以处理类似标签、实体名识别和情感分析这样的任务。官网
LingPipe:一组可以处理各种任务的工具集,支持POS标签、情感分析等。官网
Mallet:统计学自然语言处理、文档分类、聚类、主题建模等。官网
Async Http Client:异步HTTP和WebSocket客户端函数库。官网
Grizzly:NIO框架,在Glassfish中作为网络层使用。官网
Netty:构建高性能网络应用程序开发框架。官网
OkHttp:一个Android和Java应用的HTTP+SPDY客户端。官网
Undertow:基于NIO实现了阻塞和非阻塞API的Web服务器,在WildFly中作为网络层使用。官网
Ebean:支持快速数据访问和编码的ORM框架。官网
EclipseLink:支持许多持久化标准,JPA、JAXB、JCA和SDO。官网
Hibernate:广泛使用、强健的持久化框架。Hibernate的技术社区非常活跃。官网
MyBatis:带有存储过程或者SQL语句的耦合对象(Couples object)。官网
OrmLite:轻量级开发包,免除了其它ORM产品中的复杂性和开销。官网
Nutz:另一个SSH。官网,Github
JFinal:JAVA WEB + ORM框架。官网,Github
Apache FOP:从XSL-FO创建PDF。官网
Apache PDFBox:用来创建和操作PDF的工具集。官网
DynamicReports:JasperReports的精简版。官网
flyingsaucer:XML/XHTML和CSS 2.1渲染器。官网
iText:一个易于使用的PDF函数库,用来编程创建PDF文件。注意,用于商业用途时需要许可证。官网
JasperReports:一个复杂的报表引擎。官网
jHiccup:提供平台中JVM暂停的日志和记录。官网
JMH:JVM基准测试工具。官网
JProfiler:商业分析器。官网
LatencyUtils:测量和报告延迟的工具。官网
VisualVM:对运行中的应用程序信息提供了可视化界面。官网
YourKit Java Profiler:商业分析器。官网
Reactive Streams:异步流处理标准,支持非阻塞式反向压力(backpressure)。官网
Reactor:构建响应式快速数据(fast-data)应用程序的开发库。官网
RxJava:通过JVM可观察序列(observable sequence)构建异步和基于事件的程序。官网
Dropwizard:偏向于自己使用的Web框架。用来构建Web应用程序,使用了Jetty、Jackson、Jersey和Metrics。官网
Feign:受Retrofit、JAXRS-2.0和WebSocket启发的HTTP客户端连接器(binder)。官网
Jersey:JAX-RS参考实现。官网
RESTEasy:经过JAX-RS规范完全认证的可移植实现。官网
RestExpress:一个Java类型安全的REST客户端。官网
RestX:基于注解处理和编译时源码生成的框架。官网
Retrofit:类型安全的REST客户端。官网
Spark:受到Sinatra启发的Java REST框架。官网
Swagger:Swagger是一个规范且完整的框架,提供描述、生产、消费和可视化RESTful Web Service。官网
Blade:国人开发的一个轻量级的MVC框架. 它拥有简洁的代码,优雅的设计。官网
DataMelt:用于科学计算、数据分析及数据可视化的开发环境。官网
JGraphT:支持数学图论对象和算法的图形库。官网
JScience:用来进行科学测量和单位的一组类。官网
Apache Solr:一个完全的企业搜索引擎。为高吞吐量通信进行了优化。官网
Elasticsearch:一个分布式、支持多租户(multitenant)全文本搜索引擎。提供了RESTful Web接口和无schema的JSON文档。官网
Apache Lucene:是一个开放源代码的全文检索引擎工具包,是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎。官网
Apache Shiro:执行认证、授权、加密和会话管理。官网
Bouncy Castle,涵盖了从基础的帮助函数到PGP/SMIME操作。官网:多途加密开发库。支持JCA提供者(JCA provider)
Cryptomator:在云上进行客户端跨平台透明加密。官网
Keycloak:为浏览器应用和RESTful Web Service集成SSO和IDM。目前还处于beta版本,但是看起来非常有前途。官网
PicketLink:PicketLink是一个针对Java应用进行安全和身份认证管理的大型项目(Umbrella Project)。官网
FlatBuffers:高效利用内存的序列化函数库,无需解包和解析即可高效访问序列化数据。官网
Kryo:快速、高效的对象图形序列化框架。官网
FST:提供兼容JDK的高性能对象图形序列化。官网
MessagePack:一种高效的二进制序列化格式。官网
Apache Tomcat:针对Servlet和JSP的应用服务器,健壮性好且适用性强。官网
Apache TomEE:Tomcat加Java EE。官网
Jetty:轻量级、小巧的应用服务器,通常会嵌入到项目中。官网
WebSphere Liberty:轻量级、模块化应用服务器,由IBM开发。官网
WildFly:之前被称作JBoss,由Red Hat开发。支持很多Java EE功能。官网
Apache Velocity:提供HTML页面模板、email模板和通用开源代码生成器模板。官网
FreeMarker:通用模板引擎,不需要任何重量级或自己使用的依赖关系。官网
Handlebars.java:使用Java编写的模板引擎,逻辑简单,支持语义扩展(semantic Mustache)。官网
Thymeleaf:旨在替换JSP,支持XML文件的工具。官网
Apache JMeter:功能性测试和性能评测。官网
Arquillian:集成测试和功能行测试平台,集成Java EE容器。官网
AssertJ:支持流式断言提高测试的可读性。官网
Awaitility:用来同步异步操作的DSL。官网
Cucumber:BDD测试框架。官网
Gatling:设计为易于使用、可维护的和高性能负载测试工具。官网
Hamcrest:可用来灵活创建意图(intent)表达式的匹配器。官网
JMockit:用来模拟静态、final方法等。官网
JUnit:通用测试框架。官网
Mockito:在自动化单元测试中创建测试对象,为TDD或BDD提供支持。官网
PowerMock: 支持模拟静态方法、构造函数、final类和方法、私有方法以及移除静态初始化器的模拟工具。官网
REST Assured:为REST/HTTP服务提供方便测试的Java DSL。官网
Selenide:为Selenium提供精准的周边API,用来编写稳定且可读的UI测试。官网
Selenium:为Web应用程序提供可移植软件测试框架。官网
Spock:JUnit-compatible framework featuring an expressive Groovy-derived specification language.官网兼容JUnit框架,支持衍生的Groovy范的语言。
TestNG:测试框架。官网
Truth:Google的断言和命题(proposition)框架。官网
Unitils:模块化测试函数库,支持单元测试和集成测试。官网
WireMock:Web Service测试桩(Stub)和模拟函数。官网
Apache Commons:提供各种用途的函数,比如配置、验证、集合、文件上传或XML处理等。官网
args4j:命令行参数解析器。官网
CRaSH:为运行进行提供CLI。官网
Gephi:可视化跨平台网络图形化操作程序。官网
Guava:集合、缓存、支持基本类型、并发函数库、通用注解、字符串处理、I/O等。官网
JADE:构建、调试多租户系统的框架和环境。官网
javatuples:正如名字表示的那样,提供tuple支持。尽管目前tuple的概念还有留有争议。官网
JCommander:命令行参数解析器。官网
Protégé:提供存在论(ontology)编辑器以及构建知识系统的框架。官网
Apache Nutch:可用于生产环境的高度可扩展、可伸缩的网络爬虫。官网
Crawler4j:简单的轻量级网络爬虫。官网
JSoup:刮取、解析、操作和清理HTML。官网
Apache Tapestry:基于组件的框架,使用Java创建动态、强健的、高度可扩展的Web应用程序。官网
Apache Wicket:基于组件的Web应用框架,与Tapestry类似带有状态显示GUI。官网
Google Web Toolkit:一组Web开发工具集,包含在客户端将Java代码转为JavaScript的编译器、XML解析器、RCP官网API、JUnit集成、国际化支持和GUI控件。
Grails:Groovy框架,旨在提供一个高效开发环境,使用约定而非配置、没有XML并支持混入(mixin)。官网
Ninja:Java全栈Web开发框架。非常稳固、快速和高效。官网
Pippo:小型、高度模块化的类Sinatra框架。官网
Play:使用约定而非配置,支持代码热加载并在浏览器中显示错误。官网
PrimeFaces:JSF框架,提供免费和带支持的商业版本。包括若干前端组件。官网
Ratpack:一组Java开发函数库,用于构建快速、高效、可扩展且测试完备的HTTP应用程序。官网
Spring Boot:微框架,简化了Spring新程序的开发过程。官网
Spring:旨在简化Java EE的开发过程,提供依赖注入相关组件并支持面向切面编程。官网
Vaadin:基于GWT构建的事件驱动框架。使用服务端架构,客户端使用Ajax。官网
Blade:国人开发的一个轻量级的MVC框架. 它拥有简洁的代码,优雅的设计。官网
jBPM:非常灵活的业务流程管理框架,致力于构建开发与业务分析人员之间的桥梁。官网
Activity:轻量级工作流和业务流程管理框架。官网github
字节码操作
编程方式操作字节码的开发库。
集群管理
在集群内动态管理应用程序的框架。
代码分析
测量代码指标和质量工具。
编译器生成工具
用来创建解析器、解释器或编译器的框架。
外部配置工具
支持外部配置的开发库。
约束满足问题求解程序
帮助解决约束满足问题的开发库。
持续集成
CSV解析
简化CSV数据读写的框架与开发库
数据库
简化数据库交互的相关工具。
帮实现依赖翻转范式的开发库。官网
开发流程增强工具
从最基本的层面增强开发流程。
分布式应用
用来编写分布式容错应用的开发库和框架。
分布式数据库
对应用程序而言,在分布式系统中的数据库看起来就像是只有一个数据源。
发布
以本机格式发布应用程序的工具。
文档处理工具
处理Office文档的开发库。
函数式编程
函数式编程支持库。
游戏开发
游戏开发框架。
GUI
现代图形化用户界面开发库。
高性能计算
涵盖了从集合到特定开发库的高性能计算相关工具。
IDE
简化开发的集成开发环境。
JSON
简化JSON处理的开发库。
JVM与JDK
目前的JVM和JDK实现。
基于JVM的语言
除Java外,可以用来编写JVM应用程序的编程语言。
日志
记录应用程序行为日志的开发库。
机器学习
提供具体统计算法的工具。其算法可从数据中学习。
消息传递
在客户端之间进行消息传递,确保协议独立性的工具。
杂项
未分类其它资源。
应用监控工具
监控生产环境中应用程序的工具。
原生开发库
用来进行特定平台开发的原生开发库。
自然语言处理
用来专门处理文本的函数库。
网络
网络编程函数库。
ORM
处理对象持久化的API。
用来帮助创建PDF文件的资源。
性能分析
性能分析、性能剖析及基准测试工具。
响应式开发库
用来开发响应式应用程序的开发库。
REST框架
用来创建RESTful 服务的框架。
科学计算与分析
用于科学计算和分析的函数库。
搜索引擎
文档索引引擎,用于搜索和分析。
安全
用于处理安全、认证、授权或会话管理的函数库。
序列化
用来高效处理序列化的函数库。
应用服务器
用来部署应用程序的服务器。
模板引擎
在模板中替换表达式的工具。
测试
测试内容从对象到接口,涵盖性能测试和基准测试工具。
通用工具库
通用工具类函数库。
网络爬虫
用于分析网站内容的函数库。
Web框架
用于处理Web应用程序不同层次间通讯的框架。
业务流程管理套件
流程驱动的软件系统构建。
资源
社区
7. 如何自己搭建一个xmpp,实现推送消息
Android推送方案分析(MQTT/XMPP/GCM)
蜗牛TT 发布于 4个月前,共有 11 条评论
本文主旨在于,对目前Android平台上最主流的几种消息推送方案进行分析和对比,比较客观地反映出这些推送方案的优缺点,帮助大家选择最合适的实施方案。
方案1、使用GCM服务(Google Cloud Messaging)
简介:Google推出的云消息服务,即第二代的G2DM。
优点:Google提供的服务、原生、简单,无需实现和部署服务端。
缺点:Android版本限制(必须大于2.2版本),该服务在国内不够稳定、需要用户绑定Google帐号,受限于Google。
方案2、使用XMPP协议(Openfire + Spark + Smack)
简介:基于XML协议的通讯协议,前身是Jabber,目前已由IETF国际标准化组织完成了标准化工作。
优点:协议成熟、强大、可扩展性强、目前主要应用于许多聊天系统中,且已有开源的Java版的开发实例androidpn。
缺点:协议较复杂、冗余(基于XML)、费流量、费电,部署硬件成本高。
方案3、使用MQTT协议(更多信息见:http://mqtt.org/)
简介:轻量级的、基于代理的“发布/订阅”模式的消息传输协议。
优点:协议简洁、小巧、可扩展性强、省流量、省电,目前已经应用到企业领域(参考:http://mqtt.org/software),且已有C++版的服务端组件rsmb。
缺点:不够成熟、实现较复杂、服务端组件rsmb不开源,部署硬件成本较高。
方案4、使用HTTP轮循方式
简介:定时向HTTP服务端接口(Web Service API)获取最新消息。
优点:实现简单、可控性强,部署硬件成本低。
缺点:实时性差。
对各个方案的优缺点的研究和对比,推荐使用MQTT协议的方案进行实现,主要原因是:MQTT最快速,也最省流量(固定头长度仅为2字节),且极易扩展,适合二次开发。接下来,我们就来分析使用MQTT方案进行Android消息的原理和方法,并架设自己的推送服务。
如果还不明白的 话,要看分析的话,给你个网址:http://m.oschina.net/blog/82059
自己看看。