Spring WebSocket初探2 (Spring WebSocket入門教程)

2019獨角獸企業重金招聘Python工程師標準>>> hot3.png

?

?

WebSocket前端準備

  • SockJS:
    SockJS 是一個瀏覽器上運行的 JavaScript 庫,如果瀏覽器不支持 WebSocket,該庫可以模擬對 WebSocket 的支持,實現瀏覽器和 Web 服務器之間低延遲、全雙工、跨域的通訊通道。
  • Stomp
    Stomp 提供了客戶端和代理之間進行廣泛消息傳輸的框架。Stomp 是一個非常簡單而且易用的通訊協議實現,盡管代理端的編寫可能非常復雜,但是編寫一個 Stomp 客戶端卻是很簡單的事情,另外你可以使用 Telnet 來與你的 Stomp 代理進行交互。

發送公告功能

html代碼

<div>    <div>        <button id="connect" onclick="connect();">Connect</button> <button id="disconnect" disabled="disabled" onclick="disconnect();">Disconnect</button>    </div>    <div id="conversationDiv">        <p>            <label>notice content?</label>        </p>        <p>            <textarea id="name" rows="5"></textarea>        </p>        <button id="sendName" onclick="sendName();">Send</button>        <p id="response"></p>    </div>
</div>

javascript代碼

<script src="/js/sockjs-0.3.4.min.js"></script>
<script src="/js/stomp.min.js"></script>
<script>    var stompClient = null;    function setConnected(connected) {        document.getElementById('connect').disabled = connected;        document.getElementById('disconnect').disabled = !connected;        document.getElementById('conversationDiv').style.visibility = connected ? 'visible' : 'hidden';        document.getElementById('response').innerHTML = '';    }    // 開啟socket連接function connect() {        var socket = new SockJS('/socket');        stompClient = Stomp.over(socket);        stompClient.connect({}, function (frame) {            setConnected(true);            });    }    // 斷開socket連接function disconnect() {        if (stompClient != null) {            stompClient.disconnect();        }        setConnected(false);        console.log("Disconnected");    }    // 向‘/app/change-notice’服務端發送消息function sendName() {        var value = document.getElementById('name').value;            stompClient.send("/app/change-notice", {}, value);    }    connect();
</script>

相關說明:
關于JavaScript實現WebSocket的功能很簡單,基本分以下幾步:

開啟Socket

  1. var socket = new SockJS('/socket');?先構建一個SockJS對象
  2. stompClient = Stomp.over(socket);?用Stomp將SockJS進行協議封裝
  3. stompClient.connect()?與服務端進行連接,同時有一個回調函數,處理連接成功后的操作信息。

發送消息

stompClient.send("/app/change-notice", {}, value);

頁面預覽:

1240

Paste_Image.png

修改公告功能

1240


當我們發送公告后,將上圖的公告信息在不刷新頁面的情況下,使用WebSocket將其改變。發送公告的前端代碼已經完成,現在我們來寫另一個客戶端,用來接收第一個頁面發送的公告,展示在上圖紅框中。
功能比較簡單,所以下面只給出部分js代碼:

var noticeSocket = function () {    var s = new SockJS('/socket');    var stompClient = Stomp.over(s);    stompClient.connect({}, function () {         console.log('notice socket connected!');stompClient.subscribe('/topic/notice', function (data) {            $('.message span.content').html(data.body);        });    });
};

相關說明:
這里與發送公告代碼不同的是,在stompClient建立連接成功之后,我們要監聽服務端發送過來的信息,接收到之后,改變頁面上公告的內容,所以用到了stompClient.subscribe()
這個subscribe()方法功能就是定義一個訂閱地址,用來接收服務端的信息(在服務端代碼中,我們在@SendTo中指定了這個訂閱地址“/topic/notice”),當收到消息后,在回調函數中處理業務邏輯。

至此,所有的功能開發完畢!

效果演示

首先我們發布一條公告:

1240

然后我們切到另一個頁面,發現內容已變:

1240

轉載于:https://my.oschina.net/u/3229047/blog/837449

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/259615.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/259615.shtml
英文地址,請注明出處:http://en.pswp.cn/news/259615.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

軟件測試相關概念與分類

這是我看了有關軟件測試的書的一些歸納與總結。 軟件測試的核心是發現軟件中的缺陷。測試是對軟件質量的度量。 一、缺陷 缺陷&#xff0c;目前沒有標準定義 。與缺陷相關的一組定義就有&#xff1a;軟件錯誤、軟件缺陷、軟件故障、軟件失效。 軟件錯誤&#xff1a;在軟件生存周…

excel SUBTOTAL函數使用詳解

轉自&#xff1a;http://www.kuqin.com/shuoit/20110524/91710.html 今天用Excel在進行業務統計時&#xff0c;遇到一個小問題&#xff0c;Google了一下&#xff0c;又學了一招。 一般人都會使用“自動篩選”功能&#xff0c;篩選完成后&#xff0c;會在表格左下角的狀態欄中提…

java九宮格問題課程設計_課程設計九宮格數獨.doc

課程設計九宮格數獨中南民族大學管理學院學生課程設計報告課題名稱&#xff1a; java課程設計選題名稱&#xff1a; 九宮格數獨年 級&#xff1a; 2009專 業&#xff1a; 信息管理與信息系統學 號&#xff1a;姓 名&#xff1a;指導教師&#xff1a;完成地點&#xff1a; 管理學…

Scrapy使用問題整理(轉載)

轉載自&#xff1a;http://blog.csdn.net/heu07111121/article/details/50832999最近嘗試使用Scrapy進行數據抓取&#xff0c;并嘗試在windows7 64位系統上安裝scrapy&#xff0c;下面總結記錄遇到兩個問題和解決方法&#xff1a;scrapy官網的地址為&#xff1a;http://scrapy.…

英文Ubantu系統安裝中文輸入法

以前都是安裝的中文Ubantu&#xff0c;但是有時候用命令行的時候中文識別不好&#xff0c;會出現錯誤&#xff0c;所以這次安裝了英文版&#xff0c;但是安裝后發現輸入法不好用&#xff0c;于是就要自己安裝輸入法。 安裝環境為Ubantu13.04 1.卸載Ubantu默認的ibus輸入法 sudo…

控制文件初探

1、個數和位置的管理&#xff08;因為控制文件時在參數文件定義的&#xff0c;所以可以直接修改參數文件&#xff09; SPfile修改的步驟&#xff1a;a) 修改SPFILE參數control_filesb) 一致性關閉數據庫c) 增加或減少控制文件d) 啟動數據庫使用SPFILEe) 驗證結果 實驗&#xff…

String類的使用 Part2

StringBuilder 類的使用 屬性&#xff1a; namespace StringBuilderTest {class Program{static void Main(string[] args){StringBuilder s new StringBuilder("hello,world!");Console.WriteLine(s);//Length屬性Console.WriteLine("s.Length{0}", s.Le…

JAVA項目怎么不是藍色_解決IDEA創建maven項目時pom.xml沒有變藍的問題

如下所示&#xff1a;選中pom.xml&#xff0c;右鍵點擊add as maven project&#xff0c;稍等片刻后就可以了補充知識&#xff1a;Idea導入maven項目不自動識別pom.xml*Idea導入maven項目不自動識別pom.xml*當在idea中導入maven項目時&#xff0c;不能自動識別pom文件解決方法&…

C# 6.0:Expression – Bodied Methods

Expression-bodied 方法是C# 6.0 中另一個能簡化代碼的特性。我們已經對lambda表達式將funciton和delegation關聯起來的這種用法很熟悉了。Expression-bodied 將lambda 表達式的這種用法擴展到了方法上。 像下面代碼所示&#xff0c;我們有一個GetTime() 方法返回一個格式化的時…

zabbix3.0安裝

本次安裝準備安裝3.0的zabbix(LNMP)第一步 安裝zabbix官方的zabbix源&#xff0c;地址如下&#xff1a;http://repo.zabbix.com/zabbix/3.0/rhel/6/x86_64/zabbix-release-3.0-1.el6.noarch.rpm安裝zabbix的官方源rpm -ivh zabbix-release-3.0-1.el6.noarch.rpm第二步 使用yu…

android UI自動化測試工具Robotium VS NativeDriver VS Calabash

http://kongqingyun123.blog.163.com/blog/static/6377283520126294029822/ 自從上次對Robotium和nativedriver這兩個工具做對比已經過去將近一年的時間了&#xff08;上次內容見http://kongqingyun123.blog.163.com/blog/static/637728352011614111010446/&#xff09;&#x…

POJ 1228 Grandpa's Estate --深入理解凸包

題意&#xff1a; 判斷凸包是否穩定。 解法&#xff1a; 穩定凸包每條邊上至少有三個點。 這題就在于求凸包的細節了&#xff0c;求凸包有兩種算法&#xff1a; 1.基于水平序的Andrew算法 2.基于極角序的Graham算法 兩種算法都有一個類似下面的語句&#xff1a; for(int i0;i&…

趙強老師免費公開課第一季:Hadoop的背景起源

標簽&#xff1a;免費直播課 Hadoop 大數據 趙強原創作品&#xff0c;允許轉載&#xff0c;轉載時請務必以超鏈接形式標明文章 原始出處 、作者信息和本聲明。否則將追究法律責任。http://51edu.blog.51cto.com/8899635/1897555 Hadoop大數據免費公開課招募啦~~~趙強…

.NET Windows服務應用程序

此文旨在記錄個人對windows服務的理解以及學習記錄&#xff0c;高人可以直接繞行。 1.Windows 服務體系結構 http://technet.microsoft.com/zh-cn/library/aa998749(vexchg.65).aspx Windows 服務&#xff08;也稱服務應用程序&#xff09;是無論用戶是否登錄都運行在 Windows …

io流技術java_技術文章-java中的IO流

1.File類Java中對文件有操作時&#xff0c;可以實例化一個File對象&#xff0c;將文件路徑利用這樣的形式賦給File對象。File f new File(filePath);File類的基本操作包括&#xff1a;判斷是否存在&#xff1a;f.exists()獲取文件名&#xff1a;f.getName()獲取其絕對路徑&…

bootstrap-代碼-內聯代碼

說明通過 <code> 標簽包裹內聯樣式的代碼片段示例<!DOCTYPE html> <html lang"zh-CN"><head><meta charset"utf-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"view…

java類似php魔術方法_PHP與類有關的幾個魔術方法

與類有關的其他魔術方法序列化與反序列化技術含義&#xff1a;序列化&#xff1a;就是將一個變量所代表的“內存”數據&#xff0c;轉換為“字符串”形式并持久保存在硬盤上的一種做法。反序列化&#xff1a;就是將序列化之后保存在硬盤上的“字符串數據”&#xff0c;恢復為其…

IIS ARR設置HTTP跳轉到HTTPS

GUI Version - Select the website you wish to configure- In the “Features View” panel, double click URL Rewrite You will notice there are currently no rules configured for this site. Click “Add Rules…” in the Actions menu to the right of the “Features…

2013.7.15DAY2

今天自己做了炸土豆 吼吼~ 才知道雞蛋和小麥粉一起弄成漿糊涂到土豆條上炸效果很好~不過做失敗了一些啦 失敗的就用青椒炒著吃。。。。 下午準備做冰品來著。。。結果快遞都到了特別忙。。。就只弄了杯冰啤酒。。。 虐了兩道水題&#xff0c;貼上代碼。。過于水了。。。 Descri…

AutoCAD.NET API 最新(2012)教程下載及在線視頻教程DevTV

Autodek最近發布了基于最新版的AutoCAD 2012的.net API開發教程。基本內容包括&#xff1a; Overview of .NETPlugin BasicsUser InteractionDatabase fundamentalsDictionariesUser InterfaceEventsInputPoint MonitorJigs現在就可以從AutoCAD開發者中心下載&#xff0c; 看圖…