http長連接使用Pushlet來實現(xiàn)服務器端向客戶端推送信息.doc_第1頁
http長連接使用Pushlet來實現(xiàn)服務器端向客戶端推送信息.doc_第2頁
http長連接使用Pushlet來實現(xiàn)服務器端向客戶端推送信息.doc_第3頁
http長連接使用Pushlet來實現(xiàn)服務器端向客戶端推送信息.doc_第4頁
http長連接使用Pushlet來實現(xiàn)服務器端向客戶端推送信息.doc_第5頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

使用Pushlet來實現(xiàn)服務器端向客戶端推送信息1. 實現(xiàn)方式:有兩種實現(xiàn)方式:1. 通過配置文件來實現(xiàn)定時的從服務器端向客戶端推送信息2. 通過API主動向另外一端推送信息以下分別給予介紹。2. 特別注意在開始測試之前,有兩點非常重要,需要實現(xiàn)講明,否則程序?qū)o法正常運行:2.1. JSP頁面上的設定JSP頁面上必須添加以下代碼以確保Pushlet能夠正確的獲得后臺服務的地址:base href=2.2. Pushlet的JS文件的Bug修改需要修改被引用的JS文件ajax-pushlet-client.js的內(nèi)容,找到PL.pushletURL = PL._getWebRoot() + pushlet.srv;將其修改為PL.pushletURL = pushlet.srv;修改的原因是Pushlet進行地址解析的方法在某些應用中會解析錯誤,導致請求的路徑是nullpushlet.srv?,最終導致無法正確的請求到服務器的信息。2.3. 中文問題一般情況下,如果不做特殊處理,中文問題將會導致Pushlet的客戶端停止響應,解決辦法是,在使用Pushlet的客戶端代碼發(fā)送消息之前,將其進行轉碼,代碼為encodeURIComponent( msg)3. 正式開始以上準備工作完畢,就可以正式的開發(fā)測試樣例了。3.1. 定時的從后臺向前臺push信息(1) 在eclipse中創(chuàng)建一個動態(tài)的web工程(2) 配置及庫文件文件:從/ 下載最新的pushlet的開發(fā)包,將其中的以下文件按照描述進行設定序號文件名源位置目標位置備注1.pushlet.jarpushlet-2.0.4lib項目類路徑如果使用的是applet的話,還需要將pushletclient.jar設置到項目的類路徑中去2.pertiespushlet-2.0.4webappspushletWEB-INFclasses項目的src根路徑注意稍后需要修改perties,其他兩個文件的內(nèi)容不需要修改3.ajax-pushlet-client.jspushlet-2.0.4webappspushletlib項目的webrootlib需要按照之前的描述修改其中的內(nèi)容(3) 修改web.xml,將pushlet的自啟動servlet添加進去 pushlet nl.justobjects.pushlet.servlet.Pushlet 1 pushlet /pushlet.srv (4) 創(chuàng)建服務器端代碼,特別注意類和內(nèi)部靜態(tài)類的名字/* * */package com.guoguo;import java.io.Serializable;import java.io.UnsupportedEncodingException;import sun.rmi.runtime.Log;import nl.justobjects.pushlet.core.Event;import nl.justobjects.pushlet.core.EventPullSource;/* * author QIAGUO * */public class HelloWorldPushlet implements Serializable /* * */private static final long serialVersionUID = -8940934044114406724L;public static class HWPushlet extends EventPullSource Log log = Log.getLog(HWPushlet.class.getName(),HWPushlet.class.getName(), true);/* * (non-Javadoc) * * see nl.justobjects.pushlet.core.EventPullSource#getSleepTime() */Overrideprotected long getSleepTime() return 1000;/每一秒鐘自動執(zhí)行一次/* * (non-Javadoc) * * see nl.justobjects.pushlet.core.EventPullSource#pullEvent() */Overrideprotected Event pullEvent() /注意,一下是設定消息的主題/guoguo/helloworld,號稱主題是可以繼承的 /但是筆者的測試是失敗的,也許方法不對,呵呵Event event = Event.createDataEvent(/guoguo/helloworld);String data= hello,world 郭強 +System.currentTimeMillis();try data=new String(data.getBytes(UTF-8),ISO-8859-1); catch (UnsupportedEncodingException e) e.printStackTrace();event.setField(hw,data);return event;(5) 注冊服務器端代碼為事件源,在perties文件中,添加以下行source7=com.guoguo.HelloWorldPushlet$HWPushlet以上方式適用于有內(nèi)部類的情況,如果沒有內(nèi)部類的話,使用以下的方式進行注冊(這時外部類必須繼承父類EventPullSource)source7=com.guoguo.HelloWorldPushlet(6) 頁面(可以參考頁面內(nèi)注釋信息)Pushlet Test base href= /初始化pushlet客戶端PL._init(); /設定運行時顯示調(diào)試信息,不需要時,直接刪掉即可PL.setDebug(true); /設定監(jiān)聽主題:/guoguo/helloworld,與服務器端的主題完全一致PL.joinListen(/guoguo/helloworld); /接收到事件后,顯示服務器信息function onData(event) guoguo.innerText=(event.get(hw);Pushlet Test(7) 啟動服務器,即可看到頁面上的信息每秒鐘一次,進行定時的更新3.2. 主動控制發(fā)送消息3.2.1. 有刷新的提交信息(服務器端主動發(fā)送消息)(1) 創(chuàng)建一個servlet,并且注冊到web.xml中Servlet代碼package com.guoguo;import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import nl.justobjects.pushlet.core.Dispatcher;import nl.justobjects.pushlet.core.Event;import nl.justobjects.pushlet.core.SessionManager;/* * Servlet implementation class ChatServlet */public class ChatServlet extends HttpServlet private static final long serialVersionUID = 1L;/* * see HttpServlet#HttpServlet() */public ChatServlet() super();/* * see HttpServlet#service(HttpServletRequest request, HttpServletResponse * response) */protected void service(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException / myUnicast();myMulticast();/ myBroadcast();request.getRequestDispatcher(chat.jsp).forward(request, response);private void myUnicast() Event event = Event.createDataEvent(/guoguo/myevent1);event.setField(key1, Unicast msg);Dispatcher.getInstance().unicast(event, piero); / 向ID為piero的用戶推送System.out.println(success.);private void myMulticast() Event event = Event.createDataEvent(/guoguo/myevent1);/Event event = Event.createDataEvent(/guoguo);event.setField(key1, Multicast msg);Dispatcher.getInstance().multicast(event); / 向所有和myevent1名稱匹配的事件推送System.out.println(wa success.);private void myBroadcast() Event event = Event.createDataEvent(/guoguo/myevent1); / 向所有的事件推送,不要求和這兒的myevent1名稱匹配event.setField(key1, Broadcast msg);Dispatcher.getInstance().broadcast(event);System.out.println(asw success.);Web.xml ChatServlet ChatServlet com.guoguo.ChatServlet ChatServlet /ChatServlet (2) 頁面端代碼發(fā)送端base href=form action=/ChatServlet接收端base href=PL._init();PL.joinListen(/guoguo/myevent1);function onData(event) guoguo.innerText = (event.get(key1);啟動服務器,從發(fā)送端提交信息,內(nèi)容會在接收端顯示出來3.2.2. 無刷新的提交信息(從客戶端發(fā)送消息)發(fā)送端base hr

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論