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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

java中websocket_Java中使用webSocket

發布時間:2025/3/20 java 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java中websocket_Java中使用webSocket 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Java中使用webSocket

package com.yaoqi.controller.message;

import javax.websocket.*;

import javax.websocket.server.ServerEndpoint;

import java.io.IOException;

import java.util.concurrent.CopyOnWriteArraySet;

/**

* @Description @ServerEndpoint 注解是一個類層次的注解,它的功能主要是將目前的類定義成一個websocket服務器端

* 注解的值將被用于監聽用戶連接的終端訪問URL地址,客戶端可以通過這個URL來連接到WebSocket服務器端

* @Author YaoQi

* @Date 2018/3/26 16:21

*/

@ServerEndpoint("/webSocket.message")

public class MessageManage {

/**

* 靜態變量,用來記錄當前在線連接數。應該把它設計成線程安全的。

*/

private static int onlineCount = 0;

/**

* concurrent包的線程安全Set,用來存放每個客戶端對應的MyWebSocket對象。若要實現服務端與單一客戶端通信的話,可以使用Map來存放,其中Key可以為用戶標識

*/

private static CopyOnWriteArraySet<MessageManage> webSocketSet = new CopyOnWriteArraySet<MessageManage>();

/**

* 與某個客戶端的連接會話,需要通過它來給客戶端發送數據

*/

private Session session;

/**

* 連接建立成功調用的方法

*

* @param session 可選的參數。session為與某個客戶端的連接會話,需要通過它來給客戶端發送數據

*/

@OnOpen

public void onOpen(Session session) {

this.session = session;

webSocketSet.add(this); //加入set中

addOnlineCount(); //在線數加1

System.out.println("有新連接加入!當前在線人數為" + getOnlineCount());

}

/**

* 連接關閉調用的方法

*/

@OnClose

public void onClose() {

webSocketSet.remove(this); //從set中刪除

subOnlineCount(); //在線數減1

System.out.println("有一連接關閉!當前在線人數為" + getOnlineCount());

}

/**

* 收到客戶端消息后調用的方法

*

* @param message 客戶端發送過來的消息

* @param session 可選的參數

*/

@OnMessage

public void onMessage(String message, Session session) {

System.out.println("來自客戶端的消息:" + message);

//群發消息

for (MessageManage item : webSocketSet) {

try {

item.sendMessage(message);

} catch (IOException e) {

e.printStackTrace();

continue;

}

}

}

/**

* 發生錯誤時調用

*

* @param session

* @param error

*/

@OnError

public void onError(Session session, Throwable error) {

System.out.println("發生錯誤");

try {

session.close();

} catch (IOException e) {

e.printStackTrace();

}

error.printStackTrace();

}

/**

* 這個方法與上面幾個方法不一樣。沒有用注解,是根據自己需要添加的方法。

*

* @param message

* @throws IOException

*/

public void sendMessage(String message) throws IOException {

this.session.getBasicRemote().sendText(message);

//this.session.getAsyncRemote().sendText(message);

}

public static synchronized int getOnlineCount() {

return onlineCount;

}

public static synchronized void addOnlineCount() {

MessageManage.onlineCount++;

}

public static synchronized void subOnlineCount() {

MessageManage.onlineCount--;

}

}

使用js連接webSocket

<%@ page language="java" pageEncoding="UTF-8" %>

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>Java后端WebSocket的Tomcat實現</title>

</head>

<body>

Welcome<br/><input id="text" type="text"/>

<button οnclick="send()">發送消息</button>

<hr/>

<button οnclick="closeWebSocket()">關閉WebSocket連接</button>

<hr/>

<div id="message"></div>

</body>

<script type="text/javascript">

var websocket = null;

//判斷當前瀏覽器是否支持WebSocket

if ('WebSocket' in window) {

websocket = new WebSocket("ws://localhost:8080/webSocket/webSocket.message");

}

else {

alert('當前瀏覽器 Not support webSocket')

}

/**

* 連接發生錯誤的回調方法

*/

websocket.onerror = function () {

setMessageInnerHTML("WebSocket連接發生錯誤");

};

/**

* 連接成功建立的回調方法

*/

websocket.onopen = function () {

setMessageInnerHTML("WebSocket連接成功");

}

/**

* 接收到消息的回調方法

* @param event

*/

websocket.onmessage = function (event) {

setMessageInnerHTML(event.data);

}

/**

* 連接關閉的回調方法

*/

websocket.onclose = function () {

setMessageInnerHTML("WebSocket連接關閉");

}

/**

* 監聽窗口關閉事件,當窗口關閉時,主動去關閉websocket連接,防止連接還沒斷開就關閉窗口,server端會拋異常。

*/

window.onbeforeunload = function () {

closeWebSocket();

}

/**

* 將消息顯示在網頁上

* @param innerHTML

*/

function setMessageInnerHTML(innerHTML) {

document.getElementById('message').innerHTML += innerHTML + '<br/>';

}

/**

* 關閉WebSocket連接

*/

function closeWebSocket() {

websocket.close();

}

/**

* 發送消息

*/

function send() {

var message = document.getElementById('text').value;

websocket.send(message);

}

</script>

</html>

總結

以上是生活随笔為你收集整理的java中websocket_Java中使用webSocket的全部內容,希望文章能夠幫你解決所遇到的問題。

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