簡體   English   中英

如何從javascript客戶端onmessage函數發送/讀取java ByteBuffer(websocket)

[英]How to send/read java ByteBuffer (websocket) from javascript client onmessage function

java中的服務器代碼:

@OnMessage
public void onMessage(Session session, ByteBuffer message) {
    if (session.isOpen()) {
        String msg = new String(message.array());
        System.out.println("Message from " + session.getId() + ": " + msg);
        try {
           session.getBasicRemote().sendBinary(ByteBuffer.wrap("I have got the message".getBytes()));
        } catch (IOException ioe) {
            System.out.println(ioe.toString());
        }
    } else {
        System.out.println("Session is not open");
    }
}

Javascript 中的客戶端代碼:

    webSocket = new WebSocket("ws://192.168.10.1:2525/myChat/chat");
    webSocket.binaryType = 'arraybuffer';
    webSocket.onopen = function(event) {
        updateOutput("Connected!");
        connectBtn.disabled = true;
        sendBtn.disabled = false;
    };

    webSocket.onmessage = function(event) {
        updateOutput(event.data);
    };

注意:當我將它與 Web GL 客戶端一起使用時,服務器代碼工作正常,因為它發送二進制數據。 當我在服務器端(從 java 代碼)讀取字符串數據時,Javascript 客戶端工作正常:

@OnMessage
public void onMessage(Session session, String message) {}

感謝您提供任何意見的建議。

我已經找到了問題的解決方案。

我使用 ByteBuffer.js 庫在 JavaScript 中發送/讀取 ByteBuffer 類型的數據:

webSocket.binaryType = "arraybuffer";

在用於讀取數據的函數 onmessage 中:

var d = event.data;
console.log(d.toString());

在發送數據的函數send中:

var bb = dcodeIO.ByteBuffer.wrap(text);
webSocket.send(bb.toArrayBiffer());

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM