java實現websocket,前臺都後臺demo
下文的簡潔程式碼即建立了一個 WebSocket 的服務端,@ServerEndpoint("/echo")註釋端點表示將 WebSocket 服務端執行在 ws://[Server 端 IP 或域名]:[Server 埠]/websockets/echo 的訪問端點,
客戶端瀏覽器已經可以對 WebSocket 客戶端 API 發起 HTTP 長連線了。
使用 ServerEndpoint 註釋的類必須有一個公共的無引數建構函式,
@onMessage 註解的 Java 方法用於接收傳入的 WebSocket 資訊,這個資訊可以是文字格式,也可以是二進位制格式。OnOpen 在這個端點一個新的連線建立時被呼叫。引數提供了連線的另一端的更多細節。Session 表明兩個 WebSocket 端點對話連線的另一端,可以理解為類似 HTTPSession 的概念。
OnClose 在連線被終止時呼叫。引數 closeReason 可封裝更多細節,如為什麼一個 WebSocket 連線關閉。
更高階的定製如 @Message 註釋,MaxMessageSize 屬性可以被用來定義訊息位元組最大限制,在示例程式中,如果超過 6 個位元組的資訊被接收,就報告錯誤和連線關閉。
maven配置:
服務端程式碼:<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-websocket</artifactId> </dependency>
config類:import java.io.IOException; import java.io.InputStream; import javax.websocket.OnClose; import javax.websocket.OnError; import javax.websocket.OnOpen; import javax.websocket.Session; import javax.websocket.server.ServerEndpoint; @ServerEndpoint("/echo")//這裡的註解在springboot中需要宣告一個config類 public class WebSocketHandle { private Process process; private InputStream inputStream; /** * 新的WebSocket請求開啟 */ @OnOpen public void onOpen(Session session) { try { // 執行tail -f命令 process = Runtime.getRuntime().exec("tail -f /var/log/syslog"); inputStream = process.getInputStream(); // 一定要啟動新的執行緒,防止InputStream阻塞處理WebSocket的執行緒 TailLogThread thread = new TailLogThread(inputStream, session); thread.start(); } catch (IOException e) { e.printStackTrace(); } } /** * WebSocket請求關閉 */ @OnClose public void onClose() { try { if(inputStream != null) inputStream.close(); } catch (Exception e) { e.printStackTrace(); } if(process != null) process.destroy(); } @OnError public void onError(Throwable thr) { thr.printStackTrace(); } }
@Configuration
public class WebSocketConfig {
@Bean
public ServerEndpointExporter serverEndpointExporter(){
return new ServerEndpointExporter();
}
}
處理訊息的執行緒:import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import javax.websocket.Session; public class TailLogThread extends Thread { private BufferedReader reader; private Session session; public TailLogThread(InputStream in, Session session) { this.reader = new BufferedReader(new InputStreamReader(in)); this.session = session; } @Override public void run() { String line; try { while((line = reader.readLine()) != null) { // 將實時日誌通過WebSocket傳送給客戶端,給每一行新增一個HTML換行 session.getBasicRemote().sendText(line + "<br>"); } } catch (IOException e) { e.printStackTrace(); } } }
當 Browser 和 WebSocketServer 連線成功後,會觸發 onopen 訊息;如果連線失敗,傳送、接收資料失敗或者處理資料出現錯誤,
browser 會觸發 onerror 訊息;當 Browser 接收到 WebSocketServer 傳送過來的資料時,就會觸發 onmessage 訊息,引數 evt
中包含 Server 傳輸過來的資料;當 Browser 接收到 WebSocketServer 端傳送的關閉連線請求時,就會觸發 onclose 訊息。
我們可以看出所有的操作都是採用非同步回撥的方式觸發,這樣不會阻塞 UI,可以獲得更快的響應時間,更好的使用者體驗
web端程式碼:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>tail log</title>
</head>
<body>
<div id="log-container" style="height: 450px; overflow-y: scroll; background: #aaa; color: #aaa; padding: 10px;">
<div>
</div>
</div>
<script type="text/jscript" src="./jquery-3.3.1.min.js"></script>
<script>
$(document).ready(function() {
// 指定websocket路徑
var websocket = new WebSocket('ws://localhost:8080/echo');
websocket.onmessage = function(event) {
// 接收服務端的實時日誌並新增到HTML頁面中
$("#log-container div").append(event.data);
// 滾動條滾動到最低部
$("#log-container").scrollTop($("#log-container div").height() - $("#log-container").height());
};
});
</script>
</body>
</html>
相關推薦
java實現websocket,前臺都後臺demo
下文的簡潔程式碼即建立了一個 WebSocket 的服務端,@ServerEndpoint("/echo")註釋端點表示將 WebSocket 服務端執行在 ws://[Server 端 IP 或域名]:[Server 埠]/websockets/echo 的訪問端點,客戶端
【木木與呆呆的專欄】Java程式設計師,專注Java程式設計技術,開發以後臺為主前臺為輔,目前投身Hadoop大資料以及Ranger安全開發,活躍在大資料開源社群,同時推薦多種高效便捷的開發工具,分享自己的各種經驗技巧總結。
Java程式設計師,專注Java程式設計技術,開發以後臺為主前臺為輔,目前投身Hadoop大資料以及Ranger安全開發,活躍在大資料開源社群,同時推薦多種高效便捷的開發工具,分享自己的各種經驗技巧總結。...
java實現websocket 終極指南
CA sys 攔截 tex ebo encoding ++ RKE UNC 1、pom中添加依賴 <dependency> <groupId>org.springframework</groupId>
四、Netty實現webSocket,實現伺服器與瀏覽器(HTML)線上聊天功能
由於http協議有一個缺陷:通訊只能由客戶端發起。如果伺服器有連續的狀態變化,客戶端要獲知只能使用"輪詢":每隔一段時候,就發出一個詢問,瞭解伺服器有沒有新的資訊。輪詢的效率低,非常浪費資源(因為必須不停連線,或者 HTTP 連線始終開啟)
java實現爬蟲,爬取網易歌單資訊
之前一直對爬蟲很好奇,覺得它很神祕,而我有個朋友是做爬蟲的,最近有空就向他學習了一下,並試著寫了個小程式。 首先是獲得httpclient物件及httpresponse物件,此兩者是用於傳送請求及接受資料。 CloseableHttpClient httpClient
小程式與java實現websocket通訊
1.websocket類 /** * @ServerEndpoint 註解是一個類層次的註解,它的功能主要是將目前的類定義成一個websocket伺服器端, * 註解的值將被用於監聽使用者連線的終端訪問URL地址,客戶端可以通過這個URL來連線到WebSocket伺服器端 */ @Serv
java實現順序,二分,分塊查詢
二分查詢表一定要有序 下面是具體實現程式碼 import java.util.*; public class search { //順序查詢 public static int seqsearch(int[]a,int keytype){ if(a.length>0
Java實現websocket與微信小程式連線
微信的WebSocket介面和HTML5的WebSocket基本一樣,是HTTP協議升級來的,做為一個新的Socket在B/S上使用,它實現了瀏覽器與伺服器全雙工通訊。 在WebSocket出來之前,實現即時通訊通常使用Ajax來實現,而Ajax是通過輪詢的方式進行實時資料的獲
Java 實現棧,佇列
package base.structure; /** * @program: Algorithm4J * @description: 實現一個Stack * @author: Mr.Dai * @create: 2018-12-06 15:25 **/ public cla
通過Java實現HMAC,將字串雜湊成為全部由字母組成的密文串
以下Java程式碼可以將任何字串通過HMAC雜湊,並輸出成由大寫的A到P組成的密文字串。 public class HMAC { private final static String KEY_MAC = "HMACMD5"; /** * 全域性陣列 *
## java實現支付寶掃碼支付Demo原始碼
java實現支付寶掃碼支付Demo原始碼 掃碼效果圖 做這個非常非常的困難,經歷了很多很多坑後才能做出來,在這裡貼一下相關的程式碼希望能幫助做支付開發的同事們,有不懂的問題可以諮詢我QQ76949433,提供技術解答 專案結構截圖: package com.
JAVA實現websocket
什麼是websocket? 傳統的通訊模式是這樣的:客戶端(瀏覽器等)主動向伺服器傳送一個請求,伺服器接收之後,處理這個請求,然後返回一個響應給客戶端。大多數都是客戶端向伺服器傳送請求,而伺服器很難主動向客戶端傳送資料。 websocket實現了瀏覽器與伺服器的全雙工通訊,使服務
Jquery EasyUI +Ajax +Json +一般處理程式 實現資料的前臺與後臺的互動 --- 善良公社專案
經過上一篇部落格,本節主要是來看實現的功能是後臺的資料通過json資料傳過來,前臺修改的資料再傳回資料庫之後頁面再次更新table中的資料; 圖示: 例項:前臺的程式碼 <%--表格顯示區--%> <table id="tt" " ti
ssm框架下,前臺與後臺的資料互動
ssm框架下,js頁面通過json將資料傳送到後臺,後臺處理之後,再將資料傳送到前臺。 在前臺,要將使用者名稱和郵箱傳送到後臺,先將使用者名稱和和郵箱轉成json形式的資料,在通過ajax傳送到後臺,其中url為後臺要處理資料的地址。前臺主要程式碼如下,其中User是一個實
Kafka 使用Java實現資料的生產和消費demo
前言 在上一篇中講述如何搭建kafka叢集,本篇則講述如何簡單的使用 kafka 。不過在使用kafka的時候,還是應該簡單的瞭解下kafka。 Kafka的介紹 Kafka是一種高吞吐量的分散式釋出訂閱訊息系統,它可以處理消費者規模的網站中的所有動作流資
Java實現websocket 的兩種方法
一.WebSocket簡單介紹 隨著網際網路的發展,傳統的HTTP協議已經很難滿足Web應用日益複雜的需求了。近年來,隨著HTML5的誕生,WebSocket協議被提出,它實現了瀏覽器與伺服器的全雙工通訊,擴充套件了瀏覽器與服務端的通訊功能,使服務端也能主動向客戶端傳送資料。 我們知道,傳統的HTTP協議
[演算法入門]快速排序非遞迴方法(Java實現),大家一起來找茬啊~
基礎 總結一下,快速排序的步驟: 1、找到一個key值(就是陣列第一個值),先從右到左找,找到一個比它小的值,記錄下標。 2、然後從左往右找,找到一個比它大的值,記錄下標。 3、交換找到的兩個數
java實現String,date,timestamp相互轉換
一、Timestamp轉化為String:SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//定義格式,不顯示毫秒T
NodeJS實現WebSocket,太容易了吧!!
我們基於express和socket.io開發,首先我們需要安裝以下包 npm install --save express npm install --save socket.io 伺服器端程式碼
ID3演算法的java實現(轉載,修改)
決策樹是以例項為基礎的歸納學習演算法。它從一組無次序、無規則的元組中推理出決策樹表示形式的分類規則。它採用自頂向下的遞迴方式,在決策樹的內部結點進行屬性值的比較,並根據不同的屬性值從該結點向下分支,葉結點是要學習劃分的類。從根到葉結點的一條路徑就對應著一條合取