国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

springboot后端用WebSocket每秒向前端傳遞數(shù)據(jù),python接收數(shù)據(jù)

這篇具有很好參考價值的文章主要介紹了springboot后端用WebSocket每秒向前端傳遞數(shù)據(jù),python接收數(shù)據(jù)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

1?springboot

1.1 加依賴

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-websocket</artifactId>
        </dependency>

1.2?WebSocketConfig 后端設(shè)置前端請求的網(wǎng)址,注冊請求的信息

import org.springframework.context.annotation.Configuration;
import org.springframework.web.socket.config.annotation.EnableWebSocket;
import org.springframework.web.socket.config.annotation.WebSocketConfigurer;
import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry;

@Configuration
@EnableWebSocket
public class WebSocketConfig implements WebSocketConfigurer {

  @Override
  public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
    registry.addHandler(new WebSocketHandler(), "/websocket")
        .setAllowedOrigins("*");
  }
}

1.3?WebSocketHandler 數(shù)據(jù)處理與推送

import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.stereotype.Component;
import org.springframework.web.socket.CloseStatus;
import org.springframework.web.socket.TextMessage;
import org.springframework.web.socket.WebSocketSession;
import org.springframework.web.socket.handler.TextWebSocketHandler;

import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.Executors;

@Component
public class WebSocketHandler extends TextWebSocketHandler {

  private List<WebSocketSession> sessions = new CopyOnWriteArrayList<>();

  @Override
  public void afterConnectionEstablished(WebSocketSession session) throws Exception {
    sessions.add(session);
    System.out.println("WebSocket session opened: " + session.getId());

    // + 在這里 加入 每秒 推送的消息

    ScheduledExecutorService executorService = Executors.newSingleThreadScheduledExecutor();
    executorService.scheduleAtFixedRate(() -> {
      try {
        pushDateTimeToClients(); // 每秒調(diào)用這個方法處理數(shù)據(jù)
      } catch (IOException e) {
        e.printStackTrace();
      }
    }, 0, 1, TimeUnit.SECONDS);
  }

  @Override
  protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {
    System.out.println("Received message from WebSocket client: " + message.getPayload());
  }

  @Override
  public void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception {
    sessions.remove(session);
    System.out.println("WebSocket session closed: " + session.getId());
  }

  public void pushDateTimeToClients() throws IOException {
    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    String dateTimeString = dateFormat.format(new Date());
    List<String> dataList = new ArrayList<>();
    dataList.add(dateTimeString);

    ObjectMapper objectMapper = new ObjectMapper();
    String payload = objectMapper.writeValueAsString(dataList);
    TextMessage message = new TextMessage(payload);
    sessions.forEach(webSocketSession -> {
      try {
        webSocketSession.sendMessage(message);
      } catch (IOException e) {
        e.printStackTrace();
      }
    });
  }
}
/**
 * afterConnectionEstablished:
 * 當(dāng)WebSocket客戶端連接到服務(wù)端時會觸發(fā)這個方法,我們將客戶端的WebSocketSession對象添加到sessions列表中。
 * handleTextMessage: 當(dāng)WebSocket客戶端發(fā)送消息給服務(wù)端時會觸發(fā)這個方法,在這個示例中,我們暫時不需要處理這個消息。
 * afterConnectionClosed:
 * 當(dāng)WebSocket客戶端關(guān)閉連接時會觸發(fā)這個方法,我們需要將客戶端的WebSocketSession對象從sessions列表中移除。
 * pushDateTimeToClients: 這個方法用于向所有連接到WebSocket服務(wù)端的客戶端推送當(dāng)前的日期時間信息。
 */

/**
 * @Component: 該注解用于將WebSocketHandler類聲明為Bean,使其能夠被Spring容器管理,需要進(jìn)行依賴注入時直接注入該類即可。
 *             TextWebSocketHandler:
 *             這是Spring框架提供的一個實(shí)現(xiàn)了WebSocketHandler接口的抽象類,用于處理文本類型的WebSocket消息。在實(shí)現(xiàn)WebSocketHandler接口時,一般繼承該類并重寫其中的方法。
 *             WebSocketSession:
 *             該類表示W(wǎng)ebSocket連接的會話信息,包括連接ID、協(xié)議版本、URI等信息,可以通過該類實(shí)現(xiàn)向客戶端發(fā)送消息等功能,也可以獲取客戶端發(fā)送的消息等操作。
 *             CopyOnWriteArrayList:
 *             該類是Java并發(fā)包中提供的線程安全集合類之一,其內(nèi)部實(shí)現(xiàn)使用了可重入鎖。該類提供的線程安全操作包括添加、刪除、修改等,以及遍歷集合元素等操作,適用于讀多寫少的場景。
 *             ObjectMapper:
 *             Jackson庫中提供的一個用于將對象序列化為JSON格式的類。在這里用于將List對象序列化為JSON字符串。
 *             List: Java集合框架中提供的一個接口,用于表示有序、可重復(fù)的元素序列。在這里用于保存WebSocket連接會話信息。
 *             TextMessage: 表示文本類型的WebSocket消息,包括消息內(nèi)容和消息頭部信息等。
 */

2?python

2.1 pip

pip install websocket

pip install websocket-client

2.2 代碼

import websocket
import threading
import json
import time

def on_message(ws, message):
    data_list = json.loads(message)
    print('Received DateTime: ', data_list[0])

def on_error(ws, error):
    print(error)

def on_close(ws):
    print('WebSocket closed')

def on_open(ws):
    def run(*args):
        while True:
            time.sleep(10)
            ws.send('ping')
        ws.close()
        print('Thread terminating...')

    threading.Thread(target=run).start()

if __name__ == '__main__':
    websocket.enableTrace(True)
    ws = websocket.WebSocketApp('ws://localhost:8080/websocket',
                                on_message=on_message,
                                on_error=on_error,
                                on_close=on_close)
    ws.on_open = on_open
    ws.run_forever()

'''
上述代碼中確實(shí)沒有打印 ++Rcv raw 和 ++Rcv decoded 的語句。這是因?yàn)樵诖a中使用了 websocket.enableTrace(True),啟用了 WebSocket 的跟蹤模式,會在控制臺打印出 WebSocket 的詳細(xì)信息,包括收發(fā)的字節(jié)流等信息。因此打印 ++Rcv raw 和 ++Rcv decoded 的語句是由 WebSocket 庫自動生成的,不是代碼中明確調(diào)用的。

如果您想禁用這些跟蹤信息,只需要將 websocket.enableTrace(True) 改為 websocket.enableTrace(False) 即可。
'''

文章來源地址http://www.zghlxwxcb.cn/news/detail-625083.html

到了這里,關(guān)于springboot后端用WebSocket每秒向前端傳遞數(shù)據(jù),python接收數(shù)據(jù)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 前端傳遞JSON數(shù)組數(shù)據(jù)到后端(解析方法)

    ????????在前端和后端之間 傳遞數(shù)組 時,由于HTTP協(xié)議的限制,無法直接傳遞數(shù)組類型的參數(shù)。 請求參數(shù)需要被轉(zhuǎn)換為字符串格式傳遞給后端,所以需要通過 JSON.stringify() 方法將 gradeIdArray 數(shù)組轉(zhuǎn)換為一個 JSON 字符串,并將其作為參數(shù)傳遞給后端。 ????????在后端的控

    2024年02月16日
    瀏覽(31)
  • 前端如何傳遞Array、Map類型數(shù)據(jù)到后端

    前端如何傳遞Array、Map類型數(shù)據(jù)到后端

    針對前后端分離的項(xiàng)目,避免不了前端需要傳遞Array、Map類型的數(shù)據(jù)到后端,那么要怎么實(shí)現(xiàn)這種情況的參數(shù)傳遞呢?請看下文分說。 前端有Map類型數(shù)據(jù)如下: 將Map類型數(shù)據(jù)轉(zhuǎn)化成String,再進(jìn)行傳遞 將前端傳過來的String數(shù)據(jù),解析為JSON對象,再強(qiáng)制轉(zhuǎn)為java的Map 以上。本文

    2024年02月02日
    瀏覽(96)
  • 如何解決前端傳遞數(shù)據(jù)給后端時精度丟失問題

    如何解決前端傳遞數(shù)據(jù)給后端時精度丟失問題

    有時候我們在進(jìn)行修改操作時,發(fā)現(xiàn)修改既不報(bào)錯也不生效。我們進(jìn)行排查后發(fā)現(xiàn)服務(wù)器端將數(shù)據(jù)返回給前端時沒有出錯,但是前端js將數(shù)據(jù)進(jìn)行處理時卻出錯了,因?yàn)閕d是Long類型的,而js在處理后端返回給前端的Long類型數(shù)據(jù)時只能處理前16位,后3位進(jìn)行了四舍五入操作,例

    2024年02月09日
    瀏覽(166)
  • 從前端到后端:如何在 URL 參數(shù)中傳遞 JSON 數(shù)據(jù)

    在 Web 開發(fā)中,我們經(jīng)常需要將數(shù)據(jù)作為 URL 參數(shù)進(jìn)行傳遞。當(dāng)我們需要傳遞復(fù)雜的數(shù)據(jù)結(jié)構(gòu)時,如何在前端將其轉(zhuǎn)換為字符串,并在后端正確地解析它呢?本文將介紹如何在前端將 JSON 數(shù)據(jù)進(jìn)行 URL 編碼,并在后端將其解析為相應(yīng)的數(shù)據(jù)類型,同時提供 Java 語言的示例代碼。

    2024年02月07日
    瀏覽(59)
  • WebSocket實(shí)現(xiàn)后端數(shù)據(jù)變化,通知前端實(shí)時更新數(shù)據(jù)

    背景 ? 項(xiàng)目中需要做一個消息提示功能,當(dāng)有用戶處理相關(guān)待辦信息后,別的用戶需要實(shí)時更新處理后的待辦信息。 解決方案: ? 1、使用最原始的方法,寫個定時器去查詢待辦信息。但這種方式在大多數(shù)情況是不被允許的,它會浪費(fèi)系統(tǒng)中的許多資源,同時也并不是完全

    2024年04月15日
    瀏覽(23)
  • post請求:前端傳遞數(shù)組到后端,后端順利接受數(shù)組

    post請求:前端傳遞數(shù)組到后端,后端順利接受數(shù)組

    ? 可能需要解釋的地方:deletePicture是一個數(shù)組。 后端采用@requestBody注解+JSONArray來接受前端數(shù)組(測試過了,確實(shí)可以接收)? ①前端采用JSON.string將對象轉(zhuǎn)化為字符串 ②后端采用@requestbody注解+JSONArray類(hutool工具類里面的一個類)來接受前端傳遞過來的數(shù)組 一些廢話:本

    2024年02月14日
    瀏覽(23)
  • 前端傳遞Json格式,后端如何用多種方式接收

    ?一、先定義一個簡單的實(shí)體類 二、編寫前端傳遞的json數(shù)據(jù) 1.前端傳遞普通json,后端用對象接收 2.前端傳遞json數(shù)組, 3.前端傳遞json數(shù)組,后端用集合接收J(rèn)osn數(shù)組

    2024年02月12日
    瀏覽(24)
  • SpringBoot后端Long數(shù)據(jù)傳到前端js精度損失問題

    在對應(yīng)的字段上添加注解,將 Long 轉(zhuǎn)為 String 后傳輸。 在 js 對應(yīng)的結(jié)果接收上使用 BigInt 。

    2024年02月19日
    瀏覽(100)
  • 小程序后端用什么開發(fā)比較好

    在小程序后端開發(fā)中,可以使用 Node.js 和一些框架進(jìn)行開發(fā)。常見的框架有 Koa、Express、egg、Nest 等。這些框架都可以幫助開發(fā)者快速構(gòu)建小程序后端服務(wù)。 在選擇框架時,可以考慮以下幾點(diǎn): 文檔是否豐富:豐富的文檔可以幫助開發(fā)者更快地學(xué)習(xí)和使用框架。 社區(qū)是否活躍

    2024年02月07日
    瀏覽(11)
  • formData手動上傳問題前端如何傳遞后端如何接收

    formData手動上傳問題前端如何傳遞后端如何接收

    參考文章: 解決Current request is not a multipart request axios上傳文件錯誤:Current request is not a multipart reques 之前使用el-upload使用默認(rèn)action表單提交.前端默認(rèn)content-type為multipart/form-data.沒有問題. 后期漸進(jìn)式優(yōu)化.修改為axios+formdata傳遞內(nèi)容. Current request is not a multipart request 這個錯誤是因

    2024年02月03日
    瀏覽(24)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包