導航:首頁 > 操作系統 > comet4jandroid

comet4jandroid

發布時間:2023-02-22 04:31:45

㈠ maven怎麼引入comet4j

下載服務端jar文件
Comet4J目前僅支持Tomcat6、7版本,根據您所使用的Tomcat版本下載【comet4j-tomcat6.jar】或【comet4j-tomcat7.jar】文件放置到WEB項目的WEB-INF\lib目錄下。
下載客戶端js文件
下載【comet4j.js】到您的項目中,比如:WebContent\js目錄下。
修改伺服器配置文件
因為Comet4J工作在NIO方式下,所以我們需要調整伺服器連接器配置,更換為NOI連接器。 打開server.xml文件將找到原先的連接器配置:
<Connector executor="tomcatThreadPool" port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
替換為:
<Connector URIEncoding="UTF-8" connectionTimeout="20000" port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol" redirectPort="8443"/>
在web.xml中載入Comet4J框架
最後我們需要在web.xml配置偵聽和comet連接地址,以使Comet4J生效:
<listener>
<description>Comet4J容器偵聽</description>
<listener-class>org.comet4j.core.CometAppListener</listener-class>
</listener>
<servlet>
<description>Comet連接[默認:org.comet4j.core.CometServlet]</description>
<display-name>CometServlet</display-name>
<servlet-name>CometServlet</servlet-name>
<servlet-class>org.comet4j.core.CometServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>CometServlet</servlet-name>
<url-pattern>/conn</url-pattern>
</servlet-mapping>
這里是最小化配置,更多配置請參見【更多資料】。至此所有的准備工作已經就緒,現在讓我們來開發一個HelloWorld吧!
客戶端使用簡介
客戶端是一個javaScript文件(comet4j-0.0.2.js),其中最重要的是JS.Connector和JS.Engine兩個類。JS.Connector負責與伺服器建立並保持連接,而JS.Engine類負責將伺服器推送過來的消息轉化為開發人員可以處理的消息事件,並分發出去,關於客戶端的API請參見:http://comet4j.axiao.org:8080/comet4j/cdoc/ 。大多數情況下,我們僅需要使用JS.Engine類就可以完成多數的開發工作。
JS.Engine類是一個靜態類,在一個頁面中只有一個JS.Engine類的實例。它除了負責把伺服器推過來的消息轉化為事件分發以外,與伺服器的連接與斷開也由此類負責。
JS.Engine.start方法
JS.Engine.start(String str)和JS.Engine.stop(String str)分別控制連接和斷開動作,start方法需要傳入一個字元串參數,用來指定您配置的Comet4J連接地址。比如按前面准備工作的配置了CometServlet的地址為/conn,那麼可以這樣寫:
JS.Engine.start('/conn');
上段代碼我們讓瀏覽器與伺服器進行連接,當連接成功以後JS.Engine類會發出"start"事件,如何進行事件的處理我們稍後介紹。
JS.Engine.stop方法
我們也能夠讓連接斷開:
JS.Engine.stop('主動斷開');
上面代碼我們讓連接斷開,並傳入了一個「主動斷開」這樣一個斷開的原因。如果您並不需要對斷開的原因進行說明,也可以不傳遞參數:
JS.Engine.stop();
JS.Engine類的事件處理
上面我們介紹了如何使用start和stop方法來建立和斷開連接,當成功建立連接已後JS.Engine會發出"start"事件,當斷開後會發出「stop」事件,當收到某個通道推送過來的信息時也會發出與通道標識同名的事件。您可以事先在中使用JS.Engine.on方法來注冊事件處理函數。例如:
JS.Engine.on('start',function(cId, channelList, engine){
alert('連接已建立,連接ID為:' + cId);
});
JS.Engine.on('stop',function(cause, cId, url, engine){
alert('連接已斷開,連接ID為:' + cId + ',斷開原因:' + cause + ',斷開的連接地址:'+ url);
});
也可以將上段代碼寫成,下面代碼與上段代碼完全等效:
JS.Engine.on({
start : function(cId, channelList, engine){
alert('連接已建立,連接ID為:' + cId);
},
stop : function(cause, cId, url, engine){
alert('連接已斷開,連接ID為:' + cId + ',斷開原因:' + cause + ',斷開的連接地址:'+ url);
}
});
接下來,介紹一下如何對伺服器推送過來的消息進行處理。在介紹之前,我們假設後台已經注冊了一個"hello"的應用通道標識,並且只向客戶端推送簡單的字元串信息。先看如下代碼:
JS.Engine.on('hello',function(text){
alert(text);
});
這樣當伺服器端使用"hello"通道標識推送過來的消息就可以由上段代碼進行處理,將推送過來的信息彈出。
特別注意:以上代碼在事件處理函數中使用了alert僅為說明函數功能,實際使用中,在事件處理函數中切勿使用alert、prompt、confirm等可以中斷腳本運行的函數,因為Engine需要實時的保持工作狀態。
伺服器端使用簡介
服務端由一個Jar包組成,其中最重的是CometContext和CometEngine兩個類。
Comet Context 類
CometContext是一個單態類,通過其getInstance方法來獲得實例,它主要負責框架的一些初始化工作保存著一些參數的配置值,除此之外它還有一個更重要的職責——負責注冊應用通道標識。如果您想使用框架來實現自己的應用,那麼您必需要為自己的應用分配一個唯一的通道標識,並將此通道標識在WEB容器啟動時使用CometContext的registChannel方法進行注冊,這樣,客戶端才可以正確接受此應用所推送的消息。注冊一個通道標識非常簡單:
CometContext.getInstance().registChannel("hello");
這樣便注冊了一個標識為「hello」的應用通道,而客戶也可以通過JS.Engine.on('hello',function(msg){...})的形式來接收並處理來自此通道的消息。
Comet Engine 類
另一個重要的類是CometEngine,它除了負責對連接的處理之外,對於開發人員而言,更加常用的可能是它所提供的sendTo或sendToAll方法來向客戶端發送消息:
String channel = "hello";
String someConnectionId = "1125-6634-888";
engine.sendToAll(channel , "我來了!");
engine.sendTo(channel , engine.getConnection(someConnectionId),「Hi,我是XXX」);
上面代碼使用sendToAll方法向所有客戶端在"hello"通道上發送了「我來了!」這樣一條消息,然後又使用sendTo在同樣的通道上向某一個連接發送了「Hi,我是XXX」消息。 CometEngine另外一個很重要的地方在於,它是框架工作的事件引擎的集散地,它提供了BeforeConnectEvent、BeforeDropEvent、ConnectEvent、DropEvent、MessageEvent等事件。通過對這些事件的處理來實現具體的功能:
class JoinListener extends ConnectListener {
@Override
public boolean handleEvent(ConnectEvent anEvent) {
CometConnection conn = anEvent.getConn();
CometContext.getInstance().getEngine().sendTo("hello", conn.getId(),"歡迎上線");
}
}

CometEngine engine = CometContext.getInstance().getEngine();
engine.addConnectListener(new JoinListener());

㈡ Netty筆記之六:Netty對websocket的支持

WebSocket是一種規范,是Html5規范的一部分,websocket解決什麼問題呢?解決http協議的一些不足。我們知道,http協議是一種無狀態的,基於請求響應模式的協議。

網頁聊天的程序(基於http協議的),瀏覽器客戶端發送一個數據,伺服器接收到這個瀏覽器數據之後,如何將數據推送給其他的瀏覽器客戶端呢?
這就涉及到伺服器的推技術。早年為了實現這種伺服器也可以像瀏覽器客戶端推送消息的長連接需求,有很多方案,比如說最常用的採用一種輪詢技術,就是客戶端每隔一段時間,比如說2s或者3s向伺服器發送請求,去請求伺服器端是否還有信息沒有響應給客戶端,有就響應給客戶端,當然沒有響應就只是一種無用的請求。

這種長輪詢技術的缺點有:
1)響應數據不是實時的,在下一次輪詢請求的時候才會得到這個響應信息,只能說是准實時,而不是嚴格意義的實時。
2)大多數輪詢請求的空輪詢,造成大量的資源帶寬的浪費,每次http請求攜帶了大量無用的頭信息,而伺服器端其實大多數都不關注這些頭信息,而實際大多數情況下這些頭信息都遠遠大於body信息,造成了資源的消耗。

拓展
比較新的技術去做輪詢的效果是Comet。這種技術雖然可以雙向通信,但依然需要反復發出請求。而且在Comet中,普遍採用的長鏈接,也會消耗伺服器資源。

WebSocket一種在單個 TCP 連接上進行 全雙工通訊 的協議。WebSocket通信協議於2011年被IETF定為標准RFC 6455,並被RFC7936所補充規范。WebSocket API也被W3C定為標准。

WebSocket 使得客戶端和伺服器之間的數據交換變得更加簡單,允許 服務端主動向客戶端推送數據 。在 WebSocket API 中,瀏覽器和伺服器只需要完成一次握手,兩者之間就直接可以創建持久性的連接,並進行雙向數據傳輸。

websocket的出現就是解決了客戶端與服務端的這種長連接問題,這種長連接是真正意義上的長連接。客戶端與伺服器一旦連接建立雙方就是對等的實體,不再區分嚴格意義的客戶端和服務端。長連接只有在初次建立的時候,客戶端才會向服務端發送一些請求,這些請求包括請求頭和請求體,一旦建立好連接之後,客戶端和伺服器只會發送數據本身而不需要再去發送請求頭信息,這樣大量減少了
網路帶寬。websocket協議本身是構建在http協議之上的升級協議,客戶端首先向伺服器端去建立連接,這個連接本身就是http協議只是在頭信息中包含了一些websocket協議的相關信息,一旦http連接建立之後,伺服器端讀到這些websocket協議的相關信息就將此協議升級成websocket協議。websocket協議也可以應用在非瀏覽器應用,只需要引入相關的websocket庫就可以了。

HTML5定義了WebSocket協議,能更好的節省伺服器資源和帶寬,並且能夠更實時地進行通訊。Websocket使用ws或wss的統一資源標志符,類似於HTTPS,其中wss表示在TLS之上的Websocket。如:

優點

瀏覽器頁面向伺服器發送消息,伺服器將當前消息發送時間反饋給瀏覽器頁面。

伺服器端

伺服器端初始化連接

:參數是訪問路徑,這邊指定的是ws,服務客戶端訪問伺服器的時候指定的url是: ws://localhost:8899/ws 。
它負責websocket握手以及處理控制框架(Close,Ping(心跳檢檢測request),Pong(心跳檢測響應))。 文本和二進制數據幀被傳遞到管道中的下一個處理程序進行處理。


WebSocket規范中定義了6種類型的楨,netty為其提供了具體的對應的POJO實現。
WebSocketFrame:所有楨的父類,所謂楨就是WebSocket服務在建立的時候,在通道中處理的數據類型。本列子中客戶端和伺服器之間處理的是文本信息。所以范型參數是TextWebSocketFrame。

自定義Handler

頁面

啟動伺服器,然後運行客戶端頁面,當客戶端和伺服器端連接建立的時候,伺服器端執行 handlerAdded 回調方法,客戶端執行 onopen 回調方法

伺服器端控制台:

頁面:

客戶端發送消息,伺服器端進行響應,

服務端控制台列印:

客戶端也收到伺服器端的響應:

打開開發者工具

在從標準的HTTP或者HTTPS協議切換到WebSocket時,將會使用一種升級握手的機制。因此,使用WebSocket的應用程序將始終以HTTP/S作為開始,然後再執行升級。這個升級動作發生的確定時刻特定與應用程序;它可能會發生在啟動時候,也可能會發生在請求了某個特定的IURL之後。

參考技術
java web 伺服器推送技術--comet4j
Comet:基於 HTTP 長連接的「伺服器推」技術

㈢ Java Web 伺服器的消息推送 幾種方案

Java Web 伺服器的消息推送有以下幾種方案:
1. 輪詢:前端使用ajax不停的發起請求獲取想要的數據(最簡單也是最容易耗盡伺服器資源)。
2. 長連接:HTTP長連接,客戶端向服務端發起請求,服務端等有數據了才response,否則一直持有該連接Cometgithub: comet4j 項目,可以直接下載配置jar到tomcat下使用。
3、使用xmpp協議的一種技術,能夠做到js中調用伺服器的Java方法。
消息推送建議用專業的推送平台,例如:極光。深圳市和訊華谷信息技術有限公司創立於2011年,其團隊核心成員來自騰訊、摩根士丹利、豆瓣、Teradata和中國移動等公司。公司總部位於深圳,在北京、上海、廣州、成都均設有辦公室。

㈣ Java培訓機構哪家好

隨著Java的持續火熱,市面上的培訓學校也如雨後春筍,發展越來越快。這其中,肯定有一些打著培訓旗號「坑錢」的不良學校。大家對這樣的問題如此關心,想必也深深考慮過落入這些學校的後果。那如何增強自己的眼力,判斷其中的良莠,就顯得尤為重要。

建議在選擇時還是要自己去實地考察,多了解相關信息,自己做出判斷。我們可以從幾個方面來考慮:

1,學校口碑。一個學校怎麼樣,從校內學生的口中就可以得到真實口碑,建議多多實地考察,多問下校內學生,獲取真實信息。

2,課程內容。學校的質量怎麼樣,肯定要著重考慮學校教學質量,看看上課的課程質量如何,課程是否有用,安排是否合理。除了理論課是否還有實戰課。除了查詢官網的課程信息,最好是直接到學校參與試聽課。感受真實的授課環境和課程內容。

3,教師力量。課程再好也是老師來教,這時候就要了解學校的老師水平如何,看看有沒有大企業的任職經驗和多年的軟體開發經驗。

掌握了這些消息,你大概能夠判斷每個學校的優劣特點了,接下來就綜合考慮其他因素做出選擇。

當然,找到了靠譜的學校,並不意味著你就成功了,這還只是個開始。接下來如何發展,就完全看你自己的個人努力了,只要你真的努力付出心血了,那一定可以成功。

㈤ java培訓有哪些課程

市面上大多數的java課程內容其實都大同小異,理論知識講解會在四個月左右。而接下來會進行長達一個月左右的實戰演練環節。

理論課程上,最開始肯定是最基礎的內容:JavaSE,這一階段會接觸到Java基礎語法、面向對象編程思想、Java常用API、多線程並發編程、數據結構/集合框架、IO/網路編程/反射/設計模式。這一階段往往也是最重要的,後面很多知識和框架的應用都是基於這一基礎來的。學完這一部分,就能做一些簡單的桌面應用程序設計。

之後,就是一些比較進階的內容了,主流資料庫管理系統、Java前端開發技術、流行框架應用,都是要慢慢深入的。

最後,也是最重要的,就是實戰項目的訓練,掌握了再多理論知識沒有實戰的支撐也沒有用。而企業需要的也正是你的實戰能力。

可能表面上看大多數的學校課程都很雷同,但其實也有要注意的點,就是看學校的課程有沒有實時更新。隨著時代發展,Java也融入了很多新元素。只有最新的課程才是企業真正所需要的。

閱讀全文

與comet4jandroid相關的資料

熱點內容
windowscmd關機命令 瀏覽:342
雲桌面只要伺服器裝一套軟體 瀏覽:245
電腦右鍵按到什麼導致文件夾全屏 瀏覽:452
我的世界如何製造伺服器主城 瀏覽:363
linuxssh連不上 瀏覽:297
永宏plc用什麼編程電纜 瀏覽:371
win激活命令行 瀏覽:886
新手學電腦編程語言 瀏覽:893
雲空間在哪個文件夾 瀏覽:926
編程游戲小貓抓小魚 瀏覽:790
安卓dosbox怎麼打開 瀏覽:774
伺服器無影響是怎麼回事 瀏覽:954
比德電子采購平台加密 瀏覽:202
加密貨幣400億 瀏覽:524
植發2次加密 瀏覽:44
vc6查看編譯的錯誤 瀏覽:595
心理大全pdf 瀏覽:1002
區域鏈加密幣怎麼樣 瀏覽:343
查找命令符 瀏覽:95
壓縮工具zar 瀏覽:735