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
自己看看。