国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

首頁(yè) php教程 PHP開發(fā) HTML5基於Tomcat 7.0實(shí)現(xiàn)WebSocket連接並實(shí)現(xiàn)簡(jiǎn)單的即時(shí)聊天

HTML5基於Tomcat 7.0實(shí)現(xiàn)WebSocket連接並實(shí)現(xiàn)簡(jiǎn)單的即時(shí)聊天

Dec 08, 2016 pm 01:37 PM
html5

1、什麼是WebSocket?

WebSocket 是一種自然的全雙工、雙向、單套接字連接。使用WebSocket,你的HTTP 請(qǐng)求變成開啟WebSocket 連線(WebSocket 或WebSocket over TLS(TransportLayer Security,傳輸層安全性,原稱「SSL」))的單一請(qǐng)求,並且重複使用從客戶端到伺服器以及伺服器到客戶端的同一連接。 WebSocket 減少了延遲,因?yàn)橐坏┙⑵餡ebSocket 連接,伺服器可以在訊息可用時(shí)發(fā)送它們。例如,和輪詢不同,WebSocket只發(fā)出一個(gè)請(qǐng)求。伺服器不需要等待來自客戶端的請(qǐng)求。相似地,客戶端可以在任何時(shí)候向伺服器發(fā)送訊息。相較於輪詢不管是否有可用訊息,每隔一段時(shí)間都發(fā)送一個(gè)請(qǐng)求,單一請(qǐng)求大大減少了延遲。

2、WebSocket API

WebSocket API 讓你可以透過Web,在客戶端應(yīng)用程式和伺服器端進(jìn)程之間建立全雙工的雙向通訊。 WebSocket 介面規(guī)定了可用於客戶端的方法以及客戶端與網(wǎng)路的互動(dòng)方式。?

3、WebSocket建構(gòu)子

為了建立到伺服器的WebSocket連接,使用WebSocket接口,透過指向一個(gè)代表所要連接端點(diǎn)的URL,實(shí)例化一個(gè)WebSocket物件。 WebSocket 協(xié)定定義了兩種URL方案(URL scheme)—ws和wss,分別用於客戶端和伺服器之間的非加密與加密流量。

實(shí)例:var ws = new WebSocket("ws://www.websocket.org");

4、WebSocket事件

WebSocket API 是純事件驅(qū)動(dòng)的。應(yīng)用程式程式碼監(jiān)聽WebSocket物件上的事件,以便處理輸入資料和連線狀態(tài)的改變。 WebSocket協(xié)定也是事件驅(qū)動(dòng)的。

WebSocket物件調(diào)度4個(gè)不同的事件:

A、open事件:

一旦伺服器回應(yīng)了WebSocket連線請(qǐng)求,open事件觸發(fā)並建立一個(gè)連線。 open事件對(duì)應(yīng)的回呼函數(shù)稱為onopen

實(shí)例:

ws.onopen = function(e) {
console.log("Connection open...");
};

? ?

B、messagess事件:?

message事件在接收到訊息時(shí)觸發(fā)事件對(duì)應(yīng)於訊息的回調(diào)。?

實(shí)例:

ws.onmessage = function(e) {
if(typeof e.data === "string"){
console.log("String message received", e, e.data);
} else {
console.log("Other message received", e, e.data);
}
};

? ?

C、error事件:

error 事件在響應(yīng)意外故障的時(shí)候觸發(fā)。與該事件對(duì)應(yīng)的回呼函數(shù)為onerror。?
實(shí)例:

ws.onerror = function(e){
console.log('websocked error');
handerError();
}

? ?

D、close事件:

close 事件在WebSocket 連線關(guān)閉時(shí)觸發(fā)。對(duì)應(yīng)close 事件的回呼函數(shù)是onclose。

實(shí)例:

ws.onclose = function(e) {
console.log("Connection closed", e);
};

? ?

5、WebSocket方法

WebSocket 物件有兩種方法:send() 和close()。

A、 send() 方法:

使用WebSocket在客戶端和伺服器之間建立全雙工雙向連線後,就可以在連線開啟時(shí)呼叫send() 方法。使用send() 方法可以從客戶端向伺服器發(fā)送訊息。在發(fā)送一條或多條訊息之後,可以保持連線打開,或是呼叫close() 方法終止連線。

實(shí)例:

ws.send("Hello WebSocket!");

? ?

B、close ()方法:

使用close()方法,可以關(guān)閉WebSocket連線或連線嘗試。如果連線已經(jīng)關(guān)閉,該方法就什麼都不做。在呼叫close()之後,不能在已經(jīng)關(guān)閉的WebSocket上傳送任何資料。可以向close()方法傳遞兩個(gè)可選參數(shù):code(數(shù)字型的狀態(tài)代碼)和reason(一個(gè)文字字串)。傳遞這些參數(shù)能夠向伺服器傳遞關(guān)於客戶關(guān)閉連線原因的資訊。

註:以上是對(duì)WebSocket的簡(jiǎn)單介紹,以下將用一個(gè)簡(jiǎn)單的網(wǎng)頁(yè)實(shí)時(shí)聊天案例來介紹如何使用WebSocket

A:首先新建一個(gè)項(xiàng)目我這裡叫chatroom,在建一個(gè)包然後新建一個(gè)類用於實(shí)作伺服器端的連線我的類別稱為ChatWebSocketServlet.Java;

具體專案建置如下圖:?

?

B:寫伺服器端實(shí)作類別ChatWebSocketServlet.java,具體程式碼:實(shí)作前臺(tái)頁(yè)面index.jsp(為了展示功能並沒有美化,比較簡(jiǎn)陋)具體程式碼如下:

package com.yc.chat.Servlet;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.CharBuffer;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import org.apache.catalina.websocket.MessageInbound;
import org.apache.catalina.websocket.StreamInbound;
import org.apache.catalina.websocket.WebSocketServlet;
import org.apache.catalina.websocket.WsOutbound;
@WebServlet("/chat")
public class ChatWebSocketServlet extends WebSocketServlet {
private final Map<Integer, WsOutbound> map = new HashMap<Integer, WsOutbound>();
private static final long serialVersionUID = -1058445282919079067L;
@Override
protected StreamInbound createWebSocketInbound(String arg0, HttpServletRequest request) {
// StreamInbound:基于流的WebSocket實(shí)現(xiàn)類(帶內(nèi)流),應(yīng)用程序應(yīng)當(dāng)擴(kuò)展這個(gè)類并實(shí)現(xiàn)其抽象方法onBinaryData和onTextData。
return new ChatMessageInbound();
}
class ChatMessageInbound extends MessageInbound {
// MessageInbound:基于消息的WebSocket實(shí)現(xiàn)類(帶內(nèi)消息),應(yīng)用程序應(yīng)當(dāng)擴(kuò)展這個(gè)類并實(shí)現(xiàn)其抽象方法onBinaryMessage和onTextMessage。
@Override
protected void onOpen(WsOutbound outbound) {
map.put(outbound.hashCode(), outbound);
super.onOpen(outbound);
}
@Override
protected void onClose(int status) {
map.remove(getWsOutbound().hashCode());
super.onClose(status);
}
@Override
protected void onBinaryMessage(ByteBuffer buffer) throws IOException {
}
@Override
protected void onTextMessage(CharBuffer buffer) throws IOException {
String msg = buffer.toString();
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
msg = " <font color=green>匿名用戶 " + sdf.format(date) + "</font><br/> " + msg;
broadcast(msg);
}
private void broadcast(String msg) {
Set<Integer> set = map.keySet();
for (Integer integer : set) {
WsOutbound outbound = map.get(integer);
CharBuffer buffer = CharBuffer.wrap(msg);
try {
outbound.writeTextMessage(buffer);
outbound.flush();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}

? ?

這樣簡(jiǎn)單的即時(shí)聊天頁(yè)面就做好了,接下來將專案部署到Tomcat 7.0伺服器,並開啟伺服器就可以實(shí)現(xiàn)聊天了

結(jié)果展示:

1.在網(wǎng)址列輸入伺服器位址:

http://127.0.0.1:8080/chatroom/index.jsp

點(diǎn)擊連線伺服器結(jié)果如下:

2.分別在兩個(gè)不同的瀏覽器打開並互相發(fā)送訊息(我這裡用谷歌和火狐)結(jié)果如下:?

HTML5基於Tomcat 7.0實(shí)現(xiàn)WebSocket連接並實(shí)現(xiàn)簡(jiǎn)單的即時(shí)聊天

本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願(yuàn)投稿,版權(quán)歸原作者所有。本站不承擔(dān)相應(yīng)的法律責(zé)任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請(qǐng)聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動(dòng)的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強(qiáng)大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁(yè)開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級(jí)程式碼編輯軟體(SublimeText3)

HTML5:現(xiàn)代網(wǎng)絡(luò)的基礎(chǔ)(H5) HTML5:現(xiàn)代網(wǎng)絡(luò)的基礎(chǔ)(H5) Apr 21, 2025 am 12:05 AM

HTML5是超文本標(biāo)記語(yǔ)言的最新版本,由W3C標(biāo)準(zhǔn)化。 HTML5引入了新的語(yǔ)義化標(biāo)籤、多媒體支持和表單增強(qiáng),提升了網(wǎng)頁(yè)結(jié)構(gòu)、用戶體驗(yàn)和SEO效果。 HTML5引入了新的語(yǔ)義化標(biāo)籤,如、、、等,使網(wǎng)頁(yè)結(jié)構(gòu)更清晰,SEO效果更好。 HTML5支持多媒體元素和,無需第三方插件,提升了用戶體驗(yàn)和加載速度。 HTML5增強(qiáng)了表單功能,引入了新的輸入類型如、等,提高了用戶體驗(yàn)和表單驗(yàn)證效率。

HTML5:標(biāo)準(zhǔn)及其對(duì)Web開發(fā)的影響 HTML5:標(biāo)準(zhǔn)及其對(duì)Web開發(fā)的影響 Apr 27, 2025 am 12:12 AM

HTML5的核心特性包括語(yǔ)義化標(biāo)籤、多媒體支持、離線存儲(chǔ)與本地存儲(chǔ)、表單增強(qiáng)。 1.語(yǔ)義化標(biāo)籤如、等,提升代碼可讀性和SEO效果。 2.和標(biāo)籤簡(jiǎn)化多媒體嵌入。 3.離線存儲(chǔ)和本地存儲(chǔ)如ApplicationCache和LocalStorage,支持無網(wǎng)絡(luò)運(yùn)行和數(shù)據(jù)存儲(chǔ)。 4.表單增強(qiáng)引入新輸入類型和驗(yàn)證屬性,簡(jiǎn)化處理和驗(yàn)證。

HTML5和H5:了解常見用法 HTML5和H5:了解常見用法 Apr 22, 2025 am 12:01 AM

HTML5和H5沒有區(qū)別,H5是HTML5的簡(jiǎn)稱。 1.HTML5是HTML的第五個(gè)版本,增強(qiáng)了網(wǎng)頁(yè)的多媒體和交互功能。 2.H5常用於指代基於HTML5的移動(dòng)網(wǎng)頁(yè)或應(yīng)用,適用於各種移動(dòng)設(shè)備。

H5和HTML5之間的連接:相似性和差異 H5和HTML5之間的連接:相似性和差異 Apr 24, 2025 am 12:01 AM

H5和HTML5是不同的概念:HTML5是HTML的一個(gè)版本,包含新元素和API;H5是基於HTML5的移動(dòng)應(yīng)用開發(fā)框架。 HTML5通過瀏覽器解析和渲染代碼,H5應(yīng)用則需要容器運(yùn)行並通過JavaScript與原生代碼交互。

理解H5:含義和意義 理解H5:含義和意義 May 11, 2025 am 12:19 AM

H5是HTML5,是HTML的第五個(gè)版本。 HTML5提升了網(wǎng)頁(yè)的表現(xiàn)力和交互性,引入了語(yǔ)義化標(biāo)籤、多媒體支持、離線存儲(chǔ)和Canvas繪圖等新特性,推動(dòng)了Web技術(shù)的發(fā)展。

H5:探索最新版本的HTML H5:探索最新版本的HTML May 03, 2025 am 12:14 AM

html5isamajorrevisionofthehtmlStandardThatRevolutionsWebDevelopmentBybyIntroDucingNewSemanticeLementSemelementsandAndCapabilities.1)itenhancesCodereAdabilityAndSeowitability andSeowithelientsLike,and.2)

HTML5:限制 HTML5:限制 May 09, 2025 pm 05:57 PM

HTML5hasseverallimitationsincludinglackofsupportforadvancedgraphics,basicformvalidation,cross-browsercompatibilityissues,performanceimpacts,andsecurityconcerns.1)Forcomplexgraphics,HTML5'scanvasisinsufficient,requiringlibrarieslikeWebGLorThree.js.2)I

HTML5的重要目標(biāo):增強(qiáng)網(wǎng)絡(luò)開發(fā)和用戶體驗(yàn) HTML5的重要目標(biāo):增強(qiáng)網(wǎng)絡(luò)開發(fā)和用戶體驗(yàn) May 14, 2025 am 12:18 AM

html5aimstoenhancewebdevelopmentanduserexperiencethroughsemantstructure,多媒體綜合和performanceimprovements.1)SemanticeLementLike like,和ImproVereAdiability and ImproVereAdabilityActibility.2)and tagsallowsemlessallowseamelesseamlessallowseamelesseamlesseamelesseamemelessmultimedimeDiaiaembediiaembedplugins.3)。 3)3)

See all articles