1 & lt;依賴性& gt2 & ltgroupId & gtorg . Apache . Tomcat & lt;/groupId & gt;3 & ltartifactId & gt雄貓-郊狼& lt/artifact id & gt;4 & lt版本& gt7.0.39</version & gt;5 & lt/dependency & gt;6 & lt依賴性& gt7 & ltgroupId & gtorg . Apache . Tomcat & lt;/groupId & gt;8 & ltartifactId & gtTomcat-catalina & lt;/artifact id & gt;9 & lt版本& gt7.0.39</version & gt;10 & lt;/dependency & gt;11 & lt;依賴性& gt12 & lt;groupId & gtorg . Apache . Tomcat & lt;/groupId & gt;13 & lt;artifactId & gtTomcat-註解-API & lt;/artifact id & gt;14 & lt;版本& gt7.0.39</version & gt;15 & lt;/dependency & gt;
下壹步是解決架構問題。目前網上找到的關於websocket的實踐很少,基本都是websocket架構和非常簡單的例子(tomcat自帶websocket例子)。websocket機制怎麽用?首先基本框架是打算用hibernate+spring mvc結合websocket,但是實際實驗中spring mvc和websocket會有壹些沖突。因為直到前段時間,Spring Framework 4.0發布的版本才支持JDK 8和WebSocket編程。所以現階段我們需要其他方式來實現spring mvc+websocket。簡單的解決方案是編寫壹個工具類來手動獲取bean。解決spring和websocket支持後需要解決的websocket交互方式。websocket最直接的兩種方法是onTextMessage和onBinaryMessage,分別是字節流傳輸和字符流傳輸。最好的辦法是設計壹套自己的傳輸協議。字節流傳輸。前臺和後臺分別解析協議,獲得交互操作。其次,可以在onTextMessage,也就是字符流上做文章。json的引入可以得到很好的支持。
要配置websocket:
1實現繼承ContextLoaderListener的類,並在web.xml中配置
1導入javax . servlet . servlet context;2導入javax . servlet . servletcontextevent;3 4導入org . spring framework . context . application context;5導入org . spring framework . web . context . context loader listener;6導入org . spring framework . web . context . support . webapplicationcontextutils;7 8公共類SpringLoaderListener擴展ContextLoaderListener { 9 10 @ override 11公共void context initialized(Se rvletContextEvent事件){ 12 super . context initialized(event);13 servlet context context = event . getservlet context();14 application context CTX = webapplicationcontextutils . getrequiredwebapplicationcontext(context);15 springcontextutil . set context(CTX);16 17 }18 19 }
web.xml
1 & lt;聽眾& gt2 & lt偵聽器類& gt3 XXXXXX . utils . spring loader listener 4 & lt;/listener-class & gt;5 & lt/listener & gt;
獲取spring bean工具類:
1導入org . spring framework . beans . beans exception;2導入org . spring framework . beans . factory . nosuchbean definitionexception;3導入org . spring framework . context . application context;4 5公共類SpringContextUtil { 6私有靜態ApplicationContext上下文;7 8公共靜態application context get context(){ 9返回上下文;10 } 11 12公共靜態void set context(application context context){ 13 spring context util . context = context;14 }15 16公共靜態對象getBean(String name)拋出BeansException{17返回context . get bean(name);18 } 19 20 @ suppress warnings(" unchecked ")21公共靜態對象getBean(String name,Class requiredType)拋出beans exception { 22 return context . get bean(name,required type);23 } 24 25 public static boolean contains bean(字符串名稱){ 26 return context.containsBean(名稱);27 } 28 29 public static boolean is singleton(String name)拋出nosuchbeandidefinitionexception { 30 return context . is singleton(name);31 } 32 33 @ suppress warnings(" unchecked ")34公共靜態類getType(String name)拋出nosuchbeandidefinitionexception { 35 return context . getType(name);36 } 37 38 public static String[]getaliasses(String name)拋出nosuchbeandetificationexception { 39 return context . getaliasses(name);40 } 41 42 43 }
介紹json需要的jar包:
1 & lt;依賴性& gt2 & ltgroupId & gtcom . Google . code . gson & lt;/groupId & gt;3 & ltartifactId & gtgson & lt/artifact id & gt;4 & lt版本& gt2 . 2 . 3 & lt;/version & gt;5 & lt/dependency & gt;6 & lt依賴性& gt7 & ltgroupId & gtnet . SF . JSON-lib & lt;/groupId & gt;8 & ltartifactId & gtJSON-lib & lt;/artifact id & gt;9 & lt版本& gt2.4 & lt/version & gt;10 & lt;/dependency & gt;11 & lt;依賴性& gt12 & lt;groupId & gtnet . SF . ez morph & lt;/groupId & gt;13 & lt;artifactId & gtezmorph & lt/artifact id & gt;14 & lt;版本& gt1 . 0 . 6 & lt;/version & gt;15 & lt;/dependency & gt;
後臺需要添加兩個文件,壹個繼承WebSocketServlet:
1導入javax . servlet . annotation . web servlet;2導入javax . servlet . mand dispatcher;5 6 public roomsessageinbound(){ 7 if(command dispatcher = = null){ 8 command dispatcher =(CommandDispatcherUtils)spring context util . get bean(" command dispatcher ");9 room = roomlistmodel . getinstance()。getRoom(0);10 } 11 } 12 13 14 @ override 15 protected void on open(ws outbound outbound)16 room . adduser(outbound . hashcode());17 super.onOpen(出站);18 } 19 20 @ override 21 protected void on close(int status){ 22 room . remove(getWsOutbound()。hashCode());23 super.onClose(狀態);24 }25 26 @Override27受保護的void on binary message(byte buffer buffer)拋出io exception { 28 29 } 30 31 @ override 32受保護的void on text message(char buffer buffer)拋出io exception { 33 String msg = buffer . tostring();34 JSON object report = JSON object . from object(msg);35 template command command = command dispatcher . getcommandbykey(report . getstring(" command "));36 command.execute(消息、用戶、房間);37 }38 39 }
可以通過json Object Report = JSON Object將字符串轉換成JSON對象。來自對象(消息)。相當於通過websocket實現了實時對象信息的傳輸。
在首頁,妳只需要在頁面加載的時候把它添加到js就可以了。
1 $(function(){ 2 room socket = new web socket(' ws://127 . 0 . 0 . 1:8080/XXXX/房間);3 }
前端發送到後臺時,數據json.stringify(data)可以是json。
上面的代碼被刪除了很多。所以代碼不需要復制就能工作。只是提供壹個解決方案。而且新版java或者Spring Framework 4.0會很容易支持websocket的實現。主要是總結我這段時間的websocket研究。隨著各種新技術的誕生,實時web技術變得越來越成熟。Websocket是html5的壹個重要特性,值得壹看,值得研究。