日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

【WebSocket】WebSocket消息推送

發布時間:2024/5/24 综合教程 33 生活家
生活随笔 收集整理的這篇文章主要介紹了 【WebSocket】WebSocket消息推送 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

準備使用WebSocket實現Java與Vue或者安卓間的實時通信,實現私密聊天、群聊。查詢下資料備用。

WebSocket客戶端

websocket允許通過JavaScript建立與遠程服務器的連接,從而實現客戶端與服務器間雙向的通信。在websocket中有兩個方法:  

    1、send() 向遠程服務器發送數據
    2、close() 關閉該websocket鏈接

websocket同時還定義了幾個監聽函數    

    1、onopen 當網絡連接建立時觸發該事件
    2、onerror 當網絡發生錯誤時觸發該事件
    3、onclose 當websocket被關閉時觸發該事件
    4、onmessage 當websocket接收到服務器發來的消息的時觸發的事件,也是通信中最重要的一個監聽事件。msg.data

websocket還定義了一個readyState屬性,這個屬性可以返回websocket所處的狀態:

    1、CONNECTING(0) websocket正嘗試與服務器建立連接
    2、OPEN(1) websocket與服務器已經建立連接
    3、CLOSING(2) websocket正在關閉與服務器的連接
    4、CLOSED(3) websocket已經關閉了與服務器的連接

websocket的url開頭是ws,如果需要ssl加密可以使用wss,當我們調用websocket的構造方法構建一個websocket對象(new WebSocket(url))的之后,就可以進行即時通信了。

<!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="關閉" />
            <input type="button" id="btnSend" value="發送" />
        </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() {
                //實現化WebSocket對象,指定要連接的服務器地址與端口
                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);
                };
                //關閉事件
                socket.onclose = function() {
                    alert("Socket已關閉");
                };
                //發生了錯誤事件
                socket.onerror = function() {
                    alert("發生了錯誤");
                }
            });
            
            //發送消息
            $("#btnSend").click(function() {
                socket.send("這是來自客戶端的消息" + location.href + new Date());
            });
            
            //關閉
            $("#btnClose").click(function() {
                socket.close();
            });
        </script>
    </body>

</html>

WebSocket服務器端

JSR356定義了WebSocket的規范,Tomcat7中實現了該標準。JSR356 的 WebSocket 規范使用 javax.websocket.*的 API,可以將一個普通 Java 對象(POJO)使用 @ServerEndpoint 注釋作為 WebSocket 服務器的端點。

@ServerEndpoint("/push")
 public class EchoEndpoint {

 @OnOpen
 public void onOpen(Session session) throws IOException {
 //以下代碼省略...
 }
 
 @OnMessage
 public String onMessage(String message) {
 //以下代碼省略...
 }

 @Message(maxMessageSize=6)
 public void receiveMessage(String s) {
 //以下代碼省略...
 } 

 @OnError
 public void onError(Throwable t) {
 //以下代碼省略...
 }
 
 @OnClose
 public void onClose(Session session, CloseReason reason) {
 //以下代碼省略...
 } 
 
 }

上面簡潔代碼即建立了一個WebSocket的服務端,@ServerEndpoint("/push")的annotation注釋端點表示將WebSocket服務端運行在ws://[Server端IP或域名]:[Server端口]/項目/push的訪問端點,客戶端瀏覽器已經可以對WebSocket客戶端API發起HTTP長連接了。
使用ServerEndpoint注釋的類必須有一個公共的無參數構造函數,

@OnMessage注解的Java方法用于接收傳入的WebSocket信息,這個信息可以是文本格式,也可以是二進制格式。

@OnOpen在這個端點一個新的連接建立時被調用。參數提供了連接的另一端的更多細節。Session表明兩個WebSocket端點對話連接的另一端,可以理解為類似HTTPSession的概念。

@OnClose在連接被終止時調用。參數closeReason可封裝更多細節,如為什么一個WebSocket連接關閉。

更高級的定制如@Message注釋,MaxMessageSize屬性可以被用來定義消息字節最大限制,在示例程序中,如果超過6個字節的信息被接收,就報告錯誤和連接關閉。

package action;

import javax.websocket.CloseReason;
import javax.websocket.OnClose;
import javax.websocket.OnError;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.server.PathParam;
import javax.websocket.server.ServerEndpoint;

//ws://127.0.0.1:8087/Demo1/ws/張三
@ServerEndpoint("/ws/{user}")
public class WSServer {
    private String currentUser;
    
    //連接打開時執行
    @OnOpen
    public void onOpen(@PathParam("user") String user, Session session) {
        currentUser = user;
        System.out.println("Connected ... " + session.getId());
    }

    //收到消息時執行
    @OnMessage
    public String onMessage(String message, Session session) {
        System.out.println(currentUser + ":" + message);
        return currentUser + ":" + message;
    }

    //連接關閉時執行
    @OnClose
    public void onClose(Session session, CloseReason closeReason) {
        System.out.println(String.format("Session %s closed because of %s", session.getId(), closeReason));
    }

    //連接錯誤時執行
    @OnError
    public void onError(Throwable t) {
        t.printStackTrace();
    }
}

url中的字符張三是的路徑參數,響應請求的方法將自動映射。

測試運行

小結與消息推送框架

Socket在應用程序間通信被廣泛使用,如果需要兼容低版本的瀏覽器,建議使用反向ajax或長鏈接實現;如果純移動端或不需考慮非現代瀏覽器則可以直接使用websocket。Flash實現推送消息的方法不建議使用,因為依賴插件且手機端支持不好。關于反向ajax也有一些封裝好的插件如“Pushlet”

開源Java消息推送框架 Pushlet

Pushlet 是一個開源的 Comet 框架,Pushlet 使用了觀察者模型:客戶端發送請求,訂閱感興趣的事件;服務器端為每個客戶端分配一個會話 ID 作為標記,事件源會把新產生的事件以多播的方式發送到訂閱者的事件隊列里。

源碼地址:https://github.com/wjw465150/Pushlet

Pushlet是一種comet實現:在Servlet機制下,數據從server端的Java對象直接推送(push)到(動態)HTML頁面,而無需任何Javaapplet或者插件的幫助。它使server端可以周期性地更新client的web頁面,這與傳統的request/response方式相悖。瀏覽器client為兼容JavaScript1.4版本以上的瀏覽器(如InternetExplorer、FireFox),并使用JavaScript/DynamicHTML特性。而底層實現使用一個servlet通過Http連接到JavaScript所在的瀏覽器,并將數據推送到后者。

開源DotNet消息推送框架SignalR

SignalR是一個ASP .NET下的類庫,可以在ASP .NET的Web項目中實現實時通信。在Web網頁與服務器端間建立Socket連接,當WebSockets可用時(即瀏覽器支持Html5)SignalR使用WebSockets,當不支持時SignalR將使用長輪詢來保證達到相同效果。

官網:http://signalr.net/

源碼:https://github.com/SignalR/SignalR

聊天實例參考:

https://www.cnblogs.com/huanzi-qch/p/9889521.html

websocket消息推送參考:

https://www.cnblogs.com/best/p/5695570.html整理的很詳細。

詳情請看原文。

總結

以上是生活随笔為你收集整理的【WebSocket】WebSocket消息推送的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: www..99热| 亚洲天堂五码 | 青青青在线视频观看 | 无码人妻精品一区二区三区99v | 白丝一区 | 欧美激情精品久久久久久 | 亚洲精品18p | 亚洲五月六月 | 天堂网一区 | 欧美熟妇另类久久久久久多毛 | аⅴ资源中文在线天堂 | 天天曰天天爽 | 日本大胆欧美人术艺术 | 国产精品久久久久久久久久直播 | 在线视频这里只有精品 | 亚洲精品乱码久久久久 | 黄色一级大片免费版 | 欧美日韩精品 | 黄色在线观看视频 | 在线观看9.1 | 日韩精品区 | 国产一区二区视频网站 | jlzzjlzz国产精品久久 | 成人无码av片在线观看 | 免费在线看a | 久久久久人妻精品色欧美 | 黄色资源网站 | 亚洲国产成人精品激情在线 | 久久99久久99精品中文字幕 | 午夜不卡久久精品无码免费 | 日韩骚片 | 免费午夜视频在线观看 | 一级网站在线观看 | 亚洲欧美日本在线观看 | 美丽的姑娘在线观看免费 | 一区二区三区四区在线观看视频 | 国产美女视频91 | av无线看| 免费色视频 | 九色麻豆 | 91成人免费在线观看视频 | 女人扒开双腿让男人捅 | 女同动漫免费观看高清完整版在线观看 | 欧美一级做a爰片免费视频 成人激情在线观看 | 欧美韩国日本一区 | 国产jzjzjz丝袜老师水多 | 久久理论电影 | 国产在线第一页 | 想要视频在线观看 | 神马老子午夜 | 亚洲精品免费网站 | 美女日批在线观看 | 日韩网红少妇无码视频香港 | 久久精品欧美一区二区三区不卡 | 国产精品久久久久久人 | 色一区二区三区四区 | 久久国产精品免费观看 | 日韩插插插 | 国产精品人人 | 欧美sm凌虐视频网站 | 国产睡熟迷奷系列精品视频 | 久久久久性色av无码一区二区 | 永久免费在线观看视频 | 亚洲高清在线免费观看 | 日本一区二区网站 | 日本在线高清视频 | 日韩美女视频一区 | 好色婷婷 | 精品99视频 | 成人黄色三级 | 亚洲精品国产一区二 | 欧美精品色 | 国产免费一区二区三区免费视频 | 国产精品久久久久久精 | 大奶在线观看 | 老司机久久精品视频 | 美女热逼| 天天爽夜夜操 | 无码黑人精品一区二区 | 亚洲免费av一区 | 91亚洲一区二区 | 五十路japanese55丰满 | 高h文在线| 污污视频网站免费观看 | 国产精品xxxx | 一本到在线视频 | 岛国福利视频 | www.97ai.com| 69er小视频 | 网站在线免费观看 | 91热久久 | 欧美日韩国产成人 | 9191国产精品 | 香蕉大人久久国产成人av | 波多野结衣一区二区三区免费视频 | 春闺艳妇(h)高h产乳 | 麻豆免费看片 | 国产一区亚洲一区 | 日本边添边摸边做边爱 |