版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
本文格式為Word版,下載可任意編輯——基于Tomcat的websocket說明文檔Tomcat版本:Tomcat7.0.27及其以上
瀏覽器:MozillaFirefox,Chromium等,不支持IE
WebSockets簡介
WebSocket是下一代web通信的協(xié)議,他有以下特點(diǎn):·整頁重新加載
·使用Ajax處理重新加載組件·Comet通信
類似于AJAX,但在服務(wù)器上不長時間持有線程。TCP雙向通信
上面羅列的每一種特性都有優(yōu)點(diǎn)和缺點(diǎn),Tomcat6使用Comet處理機(jī)制通過HTTP實(shí)現(xiàn)了雙向通信。這種實(shí)現(xiàn)允許異步事件驅(qū)動和雙向通信,但是這種實(shí)現(xiàn)有一些限制:
·由于HTTP是基于請求/相應(yīng)的,不是一個雙向協(xié)議,代理和其他的中介機(jī)制可能無法正常運(yùn)行,而且在任何特定的時間點(diǎn),只能單向傳輸。
·對于服務(wù)器端開發(fā)者來說,引入多線程開發(fā)模型會變得更加困難。·由于不是標(biāo)準(zhǔn)的API,會導(dǎo)致沒有統(tǒng)一接口。Servlet3.0引入了一個新的功能叫做異步servlet,Servlet接收到請求之后,可能首先需要對請求攜帶的數(shù)據(jù)進(jìn)行一些預(yù)處理;接著,Servlet線程將請求轉(zhuǎn)交給一個異步線程來執(zhí)行業(yè)務(wù)處理,線程本身返回至容器,此時Servlet還沒有生成響應(yīng)數(shù)據(jù),異步線程處理完業(yè)務(wù)以后,可以直接生成響應(yīng)數(shù)據(jù)(異步線程擁有ServletRequest和ServletResponse對象的引用),或者將請求繼續(xù)轉(zhuǎn)發(fā)給其它Servlet。如此一來,Servlet線程不再是一直處于阻塞狀態(tài)以等待業(yè)務(wù)規(guī)律的處理,而是啟動異步線程之后可以馬上返回。
這個特性要比tomcat的comet處理機(jī)制強(qiáng)大。而這是一個標(biāo)準(zhǔn)的ServletAPI,在其基礎(chǔ)上建立通用開發(fā)框架是十分簡單的。異步的servlet雖然解決了一部分網(wǎng)絡(luò)通信的需求,但是由于其缺乏雙向通信的支持,使其的適用范圍依舊有限。
WebSocket是另外一種嘗試通過HTTP支持異步、事件驅(qū)動和雙向通信的規(guī)范協(xié)議。其標(biāo)準(zhǔn)化的一個形式是JavaScriptAPI。現(xiàn)在缺乏一個標(biāo)準(zhǔn)的服務(wù)器端API,Servlet3.1的專家小組正在積極的研究對此的一些基層的支持,這也是我寫這篇文章的原因。
WebSocket是否將蛻變成一個完整完備的WebSocketAPI仍有待觀測。在此期間主要的的Servlet容器都只是支持非標(biāo)準(zhǔn)的API,Tomcat也不例外。
例如
在Tomcat7.0.27版本中,apache給出了WebSocket的實(shí)現(xiàn),這項(xiàng)功能是好多Tomcat用戶一直期望的,而如今,這項(xiàng)功能有了。
第一個類,需要一個Servlet來處理WebSocket請求:
MyWebSocketServlet.Javapackagecom.yzkj.websocket;
importjavax.servlet.http.HttpServletRequest;
importorg.apache.catalina.websocket.StreamInbound;importorg.apache.catalina.websocket.WebSocketServlet;
publicclassMyWebSocketServletextendsWebSocketServlet{
/*與7.0.27不同的,Tomcat7.0.29改變了createWebSocketInbound方法的定義,增加了一個HttpServletRequest參數(shù),這樣我們也可以從request參數(shù)中獲取更多請求方的信息*/
}
@Override
protectedStreamInboundcreateWebSocketInbound(Stringarg0){}
System.out.println(\);returnnewMyMessageInbound();
這個Servlet繼承自WebSocketServlet,實(shí)現(xiàn)createWebSocketInbound方法。該方法返回其次個類的實(shí)例。
其次個類,處理每一次具體的WebSocket任務(wù):
MyMessageInbound.javapackagecom.yzkj.websocket;
importjava.io.IOException;importjava.nio.ByteBuffer;importjava.nio.CharBuffer;
importorg.apache.catalina.websocket.MessageInbound;importorg.apache.catalina.websocket.WsOutbound;
//實(shí)現(xiàn)下面四個事件處理函數(shù)(其實(shí)onClose和onOpen有缺省實(shí)現(xiàn))
publicclassMyMessageInboundextendsMessageInbound{//有二進(jìn)制消息數(shù)據(jù)到達(dá),@Override
protectedvoidonBinaryMessage(ByteBufferarg0)throwsIOException{
//TODOAuto-generatedmethodstub}
//有文本消息數(shù)據(jù)到達(dá)@Override
protectedvoidonTextMessage(CharBuffermsg)throwsIOException{for(MessageInboundmessageInbound:InitServlet.getSocketList()){
CharBufferbuffer=CharBuffer.wrap(msg);
WsOutboundoutbound=messageInbound.getWsOutbound();//getWsOutbound可以返回當(dāng)前的WsOutbound,通過他向客戶端回傳數(shù)據(jù),這里采用的是nio的CharBuffer
outbound.writeTextMessage(buffer);outbound.flush();}}
//WebSocket關(guān)閉事件,參數(shù)status應(yīng)當(dāng)來自
org.apache.catalina.websocket.Constants中定義的幾個常量,可以參考文檔或者核對一下Tomcat的源碼@Override
protectedvoidonClose(intstatus){
InitServlet.getSocketList().remove(this);super.onClose(status);}
//WebSocket握手完成,創(chuàng)立完畢,WsOutbound用于向客戶端發(fā)送數(shù)據(jù)@Override
protectedvoidonOpen(WsOutboundoutbound){super.onOpen(outbound);
InitServlet.getSocketList().add(this);}}
這個類繼承自MessageInbound類,必需實(shí)現(xiàn)onBinaryMessage和onTextMessage方法。
還要一個初始化的Servlet
InitServlet.java
packagecom.yzkj.websocket;
importjava.util.ArrayList;importjava.util.List;
importjavax.servlet.ServletConfig;importjavax.servlet.ServletException;importjavax.servlet.http.HttpServlet;
importorg.apache.catalina.websocket.MessageInbound;
publicclassInitServletextendsHttpServlet{
privatestaticListsocketList;
publicvoidinit(ServletConfigconfig)throwsServletException{InitServlet.socketList=newArrayList();super.init(config);
System.out.println(\);}
publicstaticListgetSocketList(){returnInitServlet.socketList;}}
最終,web.xml中進(jìn)行一下Servlet的配置。
mywebsocket
com.yzkj.websocket.MyWebSocketServlet
mywebsocket*.do
initServlet
com.yzkj.websocke
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度賓館會議室租賃及會議服務(wù)合同標(biāo)準(zhǔn)3篇
- 2024年度健康醫(yī)療大數(shù)據(jù)三方合伙合作合同協(xié)議3篇
- 二零二五年度報廢汽車買賣及環(huán)保處理合同示范2篇
- 二零二五年度機(jī)票退改簽服務(wù)合同3篇
- 二零二五年度景區(qū)保安服務(wù)合同終止及應(yīng)急預(yù)案2篇
- 2024年環(huán)保技術(shù)與產(chǎn)品銷售合同
- 新能源車輛生產(chǎn)合作合同
- 2024版租賃:變壓器使用合同3篇
- 隨機(jī)化近似算法在背包問題中的表現(xiàn)-洞察分析
- 2024年設(shè)備租賃與維護(hù)合同
- 0的認(rèn)識和加、減法(說課稿)-2024-2025學(xué)年一年級上冊數(shù)學(xué)人教版(2024)001
- 2025年廣西旅發(fā)南國體育投資集團(tuán)限公司招聘高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2024-2025學(xué)年銅官山區(qū)數(shù)學(xué)三年級第一學(xué)期期末調(diào)研試題含解析
- ISO 56001-2024《創(chuàng)新管理體系-要求》專業(yè)解讀與應(yīng)用實(shí)踐指導(dǎo)材料之18:“7支持-7.1資源”(雷澤佳編制-2025B0)
- ISO 56001-2024《創(chuàng)新管理體系-要求》專業(yè)解讀與應(yīng)用實(shí)踐指導(dǎo)材料之17:“6策劃-6.6合作”(雷澤佳編制-2025B0)
- ISO 56001-2024《創(chuàng)新管理體系-要求》專業(yè)解讀與應(yīng)用實(shí)踐指導(dǎo)材料之16:“6策劃-6.5組織結(jié)構(gòu)”(雷澤佳編制-2025B0)
- 全國英語教師賽課一等獎七年級上冊(人教2024年新編)《Unit 7 Happy Birthday》教學(xué)設(shè)計
- 碳排放監(jiān)測技術(shù)
- 2024年世界職業(yè)院校技能大賽高職組“關(guān)務(wù)實(shí)務(wù)組”賽項(xiàng)參考試題庫(含答案)
- 江西省2023-2024學(xué)年高二上學(xué)期期末教學(xué)檢測數(shù)學(xué)試題 附答案
- 超市項(xiàng)目投標(biāo)書模板
評論
0/150
提交評論