WebSocket的學習以及使用
首先,舊版本的Tomcat 不能支援WebSocket, 至少需要 7.0.47 以上才可以;
其次,建立BitCoinServer類,用注解@ServerEndpoint("/ws/bitcoinServer")把它标記為一個WebSocket Server
ws/bitcoinServer 表示有通過這個位址通路該服務
OnOpen 表示有浏覽器連結過來的時候被調用
OnClose 表示浏覽器發出關閉請求的時候被調用
OnMessage 表示浏覽器發消息的時候被調用
OnError 表示有錯誤發生,比如網絡斷開了等等
sendMessage 用于向浏覽器回發消息
其中OnOpen發生的時候,即有連結過來的時候,會把目前WebSocket Server丢在ServerManager裡管理起來,這樣Tomcat才知道總共有哪些Server, 友善以後進行群發;
代碼如下:
|
其次,建立ServerManager 類,ServerManager 中維護了一個線程安全的集合servers, 用于因為浏覽器發起連接配接請求而建立的BitCoinServer.
broadCast 方法周遊這個集合,讓每個Server向浏覽器發消息。
|
然後還需建立BitCoinDataCenter,使其繼承HttpServlet.
标記為Servlet不是為了其被通路,而是為了便于伴随Tomcat一起啟動,因為可以通過loadOnStartup一起就啟動了
這個類實作了Runnable,可以在初始化方法裡建立一個線程并調用之。
run 方法: 每個1-3秒就建立一個新價格,然後根據目前有多少人連結過來,進行調整價格,接着通過ServerManager廣播出去。 這樣浏覽器就看到如如圖所示的效果了
|
最後,建立index.jsp頁面進行測試
在WebContent下建立index.jsp
主要代碼講解:
1. 判斷浏覽器是否支援WebSocket;
if ('WebSocket' in window) {}
2. 接受伺服器回發的消息
websocket.onmessage = function (event) { setMessageInnerHTML(event.data);
}
|