socket websocket
1.websocket客戶端
websocket允許通過JavaScript建立與遠(yuǎn)程服務(wù)器的連接,從而實現(xiàn)客戶端與服務(wù)器間雙向的通信。在websocket中有兩個方法:
1、send() 向遠(yuǎn)程服務(wù)器發(fā)送數(shù)據(jù)
2、close() 關(guān)閉該websocket鏈接
websocket同時還定義了幾個監(jiān)聽函數(shù)
1、onopen 當(dāng)網(wǎng)絡(luò)連接建立時觸發(fā)該事件
2、onerror 當(dāng)網(wǎng)絡(luò)發(fā)生錯誤時觸發(fā)該事件
3、onclose 當(dāng)websocket被關(guān)閉時觸發(fā)該事件
4、onmessage 當(dāng)websocket接收到服務(wù)器發(fā)來的消息的時觸發(fā)的事件,也是通信中最重要的一個監(jiān)聽事件。msg.data
websocket還定義了一個readyState屬性,這個屬性可以返回websocket所處的狀態(tài):
1、CONNECTING(0) websocket正嘗試與服務(wù)器建立連接
2、OPEN(1) websocket與服務(wù)器已經(jīng)建立連接
3、CLOSING(2) websocket正在關(guān)閉與服務(wù)器的連接
4、CLOSED(3) websocket已經(jīng)關(guān)閉了與服務(wù)器的連接
websocket的url開頭是ws,如果需要ssl加密可以使用wss,當(dāng)我們調(diào)用websocket的構(gòu)造方法構(gòu)建一個websocket對象(new WebSocket(url))的之后,就可以進(jìn)行即時通信了。
<!DOCTYPE html> <html><head><meta name="viewport" content="width=device-width" /><title>WebSocket 客戶端</title></head><body><div><input type="button" id="btnConnection" value="連接" /><input type="button" id="btnClose" value="關(guān)閉" /><input type="button" id="btnSend" value="發(fā)送" /></div><script src="js/jquery-1.11.1.min.js" type="text/javascript" charset="utf-8"></script><script type="text/javascript">var socket;if(typeof(WebSocket) == "undefined") {alert("您的瀏覽器不支持WebSocket");return;}$("#btnConnection").click(function() {//實現(xiàn)化WebSocket對象,指定要連接的服務(wù)器地址與端口socket = new WebSocket("ws://192.168.1.2:8888");//打開事件socket.onopen = function() {alert("Socket 已打開");//socket.send("這是來自客戶端的消息" + location.href + new Date());};//獲得消息事件socket.onmessage = function(msg) {alert(msg.data);};//關(guān)閉事件socket.onclose = function() {alert("Socket已關(guān)閉");};//發(fā)生了錯誤事件socket.onerror = function() {alert("發(fā)生了錯誤");}});//發(fā)送消息$("#btnSend").click(function() {socket.send("這是來自客戶端的消息" + location.href + new Date());});//關(guān)閉$("#btnClose").click(function() {socket.close();});</script></body></html>2.websocket服務(wù)器端
JSR356定義了WebSocket的規(guī)范,Tomcat7中實現(xiàn)了該標(biāo)準(zhǔn)。JSR356 的 WebSocket 規(guī)范使用 javax.websocket.*的 API,可以將一個普通 Java 對象(POJO)使用 @ServerEndpoint 注釋作為 WebSocket 服務(wù)器的端點。
@ServerEndpoint("/push")public class EchoEndpoint {@OnOpenpublic void onOpen(Session session) throws IOException {//以下代碼省略...}@OnMessagepublic String onMessage(String message) {//以下代碼省略...}@Message(maxMessageSize=6)public void receiveMessage(String s) {//以下代碼省略...} @OnErrorpublic void onError(Throwable t) {//以下代碼省略...}@OnClosepublic void onClose(Session session, CloseReason reason) {//以下代碼省略...} }上面簡潔代碼即建立了一個WebSocket的服務(wù)端,@ServerEndpoint("/push")的annotation注釋端點表示將WebSocket服務(wù)端運行在ws://[Server端IP或域名]:[Server端口]/項目/push的訪問端點,客戶端瀏覽器已經(jīng)可以對WebSocket客戶端API發(fā)起HTTP長連接了。
使用ServerEndpoint注釋的類必須有一個公共的無參數(shù)構(gòu)造函數(shù),@onMessage注解的Java方法用于接收傳入的WebSocket信息,這個信息可以是文本格式,也可以是二進(jìn)制格式。
OnOpen在這個端點一個新的連接建立時被調(diào)用。參數(shù)提供了連接的另一端的更多細(xì)節(jié)。Session表明兩個WebSocket端點對話連接的另一端,可以理解為類似HTTPSession的概念。
OnClose在連接被終止時調(diào)用。參數(shù)closeReason可封裝更多細(xì)節(jié),如為什么一個WebSocket連接關(guān)閉。
更高級的定制如@Message注釋,MaxMessageSize屬性可以被用來定義消息字節(jié)最大限制,在示例程序中,如果超過6個字節(jié)的信息被接收,就報告錯誤和連接關(guān)閉。
url中的字符張三是的路徑參數(shù),響應(yīng)請求的方法將自動映射。
3.小結(jié)
?Socket在應(yīng)用程序間通信被廣泛使用,如果需要兼容低版本的瀏覽器,建議使用反向ajax或長鏈接實現(xiàn);如果純移動端或不需考慮非現(xiàn)代瀏覽器則可以直接使用websocket。Flash實現(xiàn)推送消息的方法不建議使用,因為依賴插件且手機(jī)端支持不好。關(guān)于反向ajax也有一些封裝好的插件如“Pushlet”。
參考:http://www.cnblogs.com/best/p/5695570.html
轉(zhuǎn)載于:https://www.cnblogs.com/crazycode2/p/6922556.html
總結(jié)
以上是生活随笔為你收集整理的socket websocket的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 梦到棺材预示着什么
- 下一篇: 孕妇做梦梦到自己出轨是什么意思