中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

java與微信小程序如何實現websocket長連接

發布時間:2021-04-27 10:26:32 來源:億速云 閱讀:312 作者:小新 欄目:編程語言

這篇文章主要介紹java與微信小程序如何實現websocket長連接,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

Java是什么

Java是一門面向對象編程語言,可以編寫桌面應用程序、Web應用程序、分布式系統和嵌入式系統應用程序。

java與微信小程序實現websocket長連接的具體內容如下

背景:

需要在小程序實現地圖固定坐標下實時查看消息

java環境 :tomcat7 jdk1.7

1.java

websocket 類

package com.qs.util;
 
 
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.concurrent.CopyOnWriteArraySet;
 
import javax.websocket.*;
import javax.websocket.server.ServerEndpoint;
 
import com.qs.controller.UserController;
 
/**
 * @ServerEndpoint 注解是一個類層次的注解,它的功能主要是將目前的類定義成一個websocket服務器端,
 * 注解的值將被用于監聽用戶連接的終端訪問URL地址,客戶端可以通過這個URL來連接到WebSocket服務器端
 */
@ServerEndpoint("/websocket")
public class WebSocketTest {
 
 //靜態變量,用來記錄當前在線連接數。應該把它設計成線程安全的。
 private static int onlineCount = 0;
 
 //concurrent包的線程安全Set,用來存放每個客戶端對應的MyWebSocket對象。若要實現服務端與單一客戶端通信的話,可以使用Map來存放,其中Key可以為用戶標識
 private static CopyOnWriteArraySet<WebSocketTest> webSocketSet = new CopyOnWriteArraySet<WebSocketTest>();
 
 //與某個客戶端的連接會話,需要通過它來給客戶端發送數據
 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(WebSocketTest 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("發生錯誤");
 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() {
 WebSocketTest.onlineCount++;
 }
 
 public static synchronized void subOnlineCount() {
 WebSocketTest.onlineCount--;
 }
 
}

2. jsp

<%@ page language="java" pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html>
<head>
 <title>Java后端WebSocket的Tomcat實現</title>
</head>
<body>
 Welcome<br/><input id="text" type="text"/>
 <button onclick="send()">發送消息</button>
 <hr/>
 <button onclick="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://image.aropen.com/Image-retrievals/websocket");
 }
 else {
  alert('當前瀏覽器 Not support websocket')
 }
 
 //連接發生錯誤的回調方法
 websocket.onerror = function () {
  setMessageInnerHTML("WebSocket連接發生錯誤");
 };
 
 //連接成功建立的回調方法
 websocket.onopen = function () {
  setMessageInnerHTML("WebSocket連接成功");
  
 }
 
 //接收到消息的回調方法
 websocket.onmessage = function (event) {
  setMessageInnerHTML(event.data);
 }
 
 //連接關閉的回調方法
 websocket.onclose = function () {
  setMessageInnerHTML("WebSocket連接關閉");
 }
 
 //監聽窗口關閉事件,當窗口關閉時,主動去關閉websocket連接,防止連接還沒斷開就關閉窗口,server端會拋異常。
 window.onbeforeunload = function () {
  closeWebSocket();
 }
 
 //將消息顯示在網頁上
 function setMessageInnerHTML(innerHTML) {
  document.getElementById('message').innerHTML += innerHTML + '<br/>';
 }
 
 //關閉WebSocket連接
 function closeWebSocket() {
  websocket.close();
 }
 
 //發送消息
 function send() {
  var message = document.getElementById('text').value;
  var arr=['zhangsan,hello,1','lisi,word,1','wangwu,hi,1','zhaoliu,hehe,1','tianqi,haha,1'];
  window.setInterval(function(){
   websocket.send(arr[Math.floor(Math.random()*4)]);
  },5000);
  //websocket.send(message);
 }
</script>
</html>

java與微信小程序如何實現websocket長連接

以上是“java與微信小程序如何實現websocket長連接”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

安庆市| 桂东县| 蕲春县| 远安县| 当阳市| 颍上县| 辽阳县| 岐山县| 宕昌县| 芜湖市| 勐海县| 郯城县| 武威市| 广平县| 神农架林区| 侯马市| 湘潭市| 驻马店市| 大厂| 托克逊县| 龙泉市| 达州市| 轮台县| 乾安县| 淳安县| 白山市| 辽阳县| 大埔区| 拉孜县| 龙州县| 安福县| 靖宇县| 舟曲县| 得荣县| 江西省| 灵丘县| 南充市| 肥西县| 普格县| 克山县| 荔波县|