知識點:springboot專案中,websoket實時推送技術的介紹與使用
一、雙向通訊
http協議通訊只能由客戶端發起請求,服務端返回查詢結果,如果我們想定時獲取服務端的狀態變化,相對麻煩一點,websoket協議之前,可以通過輪詢,長輪詢,iframe流的方式實現,(可參考我以前在乙個專案裡,做了乙個使用者搶登入的功能(乙個賬戶同一時間只能由乙個使用者登入,如果之後有人登入,那麼之前登入的使用者就強制退出),用的是很簡單的輪詢,客戶端定時向後台發請求,知道有新使用者登入以後,則下線,但是缺點是輪詢的間隔過長,會導致使用者不能及時接收到更新的資料;輪詢的間隔過短,會導致查詢請求過多,增加伺服器端的負擔,所以如果伺服器端一旦知道新使用者登陸了,主動向客戶端發訊息,就避免了一些不必要的請求,可以用websoket技術
三:實現**
1.引入mvn依賴
org.springframework.bootgroupid>2.啟用websoket支援spring-boot-starter-websocketartifactid>
dependency>
@configuration3.server端:public class websocketconfig
}
@serverendpoint("/websocket_server")@component
public class websocketserver implements initializingbean catch (exception e) }}
/*** 連線關閉呼叫的方法
*/@onclose
public void onclose()
/*** 收到客戶端訊息後呼叫的方法
* @param message 客戶端傳送過來的訊息
*/@onmessage
public void onmessage(string message) else
} catch (ioexception e) }}
/*** 發生錯誤時呼叫
* @param session
* @param error
*/@onerror
public void onerror(session session, throwable error)
/*** 這個方法與上面幾個方法不一樣。沒有用註解,是根據自己需要新增的方法。
* 實現伺服器主動推送
* @param message
* @throws ioexception
*/public void sendmessage(string message) throws ioexception
public static synchronized int getonlinecount()
public static synchronized void addonlinecount()
public static synchronized void subonlinecount()
@override
public void afterpropertiesset() throws exception
public websocketserver()
}
5.頁面發起soket請求websoket測試頁
div>
div>
debugger
var websocket = null;
var lockreconnect = false; //避免ws重複連線
var wsurl="ws:";
createwebsocket(wsurl);
function createwebsocket(url) else if ('mozwebsocket' in window)else
initeventhandle(url);
}catch(e)
}function initeventhandle(url) ;
/* 連線成功建立的**方法 */
websocket.onopen = function()
/* 接收到訊息的**方法 */
websocket.onmessage = function(event) }}
/* 連線關閉的**方法 */
websocket.onclose = function()
}/* 監聽視窗關閉事件,當視窗關閉時,主動去關閉websocket連線,防止連線還沒斷開就關閉視窗,server端會拋異常。 */
window.onbeforeunload = function()
/* 將訊息顯示在網頁上 */
function setmessageinnerhtml(innerhtml)
/* 關閉websocket連線 */
function closewebsocket()
/* 傳送訊息 */
function send() ';
websocket.send(message);
}**放不下了
,可以參考原始碼
很久前設計的webs管理器
webshell管理分為控制端和受控端,受控端使用指令碼實現,很簡單,就是乙個一句話木馬,控制端可以向受控端傳送指令碼命令來使受控端執行特定的程式。所以,比較重要的就是指令碼的編寫了,因此,程式的可擴充套件性要求就比較高了,所以,我想的也簡單,程式只做出一些介面方法,剩下的所有功能交給指令碼去實現,...
Springboot中Thymeleaf外部模板
spingboot專案中,預設的thymeleaf模板資料夾是在 src main resources templates,打包時後在classpath templates下 jar包同目錄下的 templates 目錄 spring.thymeleaf.prefix file templates ...
springboot中controller無法訪問
configuration 該註解將類可以看成配置檔案,通常和 bean配合使用 enableautoconfiguration 在程式啟動時自動載入配置 componentscan 會自動掃瞄指定包下的全部標有 component的類,並註冊成bean,當然包括 component下的子註解 se...