緣起
socket.io是一個跨瀏覽器的全平臺反響AJAX實(shí)現(xiàn),官網(wǎng)(http://socket.io)定義為:the cross-browser WebSocket for realtime apps.
個人認(rèn)為這是一個跨瀏覽器的集大成者,支持桌面端和移動端瀏覽器(http://socket.io/#browser-support):
Desktop
- Internet Explorer 5.5+
- Safari 3+
- Google Chrome 4+
- Firefox 3+
- Opera 10.61+
Mobile
- iPhone Safari
- iPad Safari
- Android WebKit
- WebOs WebKit
為了支持眾多瀏覽器,必然內(nèi)置對若干協(xié)議的支持:
- WebSocket
- Adobe® Flash® Socket
- AJAX long polling
- AJAX multipart streaming
- Forever Iframe
- JSONP Polling
socket.io跨瀏覽器,根據(jù)瀏覽器自動適配最適合方案進(jìn)行實(shí)時推送。
官方提供了各種語言的實(shí)現(xiàn),見 https://github.com/learnboost/socket.io/wiki/,有java語言實(shí)現(xiàn)服務(wù)器端,但不支持最新的0.9版本,于是萌發(fā)了重寫一個的想法。
概述
這是一個Socket.IO服務(wù)器端實(shí)現(xiàn),基于netty框架,適配socket.io 0.9-1.0版本(雖然socket.io 目前還處于 0.9版本,會支持到1.0)
項(xiàng)目地址:
http://code.google.com/p/socketio-netty/
采用流行的Apache License 2.0協(xié)議,svn作為源代碼管理。
至于為什么沒有采用tomcat/jetty支持的servlet3規(guī)范、sebsocket實(shí)現(xiàn),個人認(rèn)為,構(gòu)建在其基礎(chǔ)上較為容易,tomcat7最新版剛剛支持websocket,傳說支持websocket的servlet 3.1還未出世,等等看吧。
而Netty這個異步IO框架,我們可以在它的基礎(chǔ)上一站式搞定如此多的傳輸通道/協(xié)議。
socketio-netty支持:
- WebSocket
- Flash Socket
- AJAX long polling
- Forever Iframe
- JSONP Polling
等傳輸通道協(xié)議。
示范
本示范,參考 socket.io node.js 版本的聊天實(shí)現(xiàn)(chat),客戶端完全一致,服務(wù)器端完全換成了socketio-netty實(shí)現(xiàn)。其它的沒有任何變化。嗯,可能看一個示范,可以讓人更放心的使用。
客戶端入口 chat.html (存放在tomcat/jetty/nginx/apache/iis相應(yīng)位置,可以直接訪問即可):
看一下,我們的服務(wù)器端如何實(shí)現(xiàn),來一個啟動入口:
然后需要一個DemoChatHandler處理器,這個是一個單列多線程模式:
以上就是整個的聊天室實(shí)現(xiàn),雖然不算優(yōu)雅,但很簡單。
所有你所需要做的就是,檢出代碼,運(yùn)行com.yongboy.socketio.test.ChatServer即可。