如何从javascript客户端onmessage函数发送/读取java ByteBuffer(websocket)

Posted

技术标签:

【中文标题】如何从javascript客户端onmessage函数发送/读取java ByteBuffer(websocket)【英文标题】:How to send/read java ByteBuffer (websocket) from javascript client onmessage function 【发布时间】:2016-02-13 09:41:43 【问题描述】:

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 客户端一起使用时,服务器代码工作正常,因为它发送二进制数据。 当我在服务器端读取字符串数据时,Javascript 客户端工作正常 (来自java代码):

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

感谢任何 cmets 的建议。

【问题讨论】:

【参考方案1】:

我已经找到了问题的解决方案。

我使用 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());

【讨论】:

以上是关于如何从javascript客户端onmessage函数发送/读取java ByteBuffer(websocket)的主要内容,如果未能解决你的问题,请参考以下文章

SSE:“onmessage”永远不会被调用

javascript 提供用于从React-Native WebView发送和接收消息的示例实现(使用postMessage / onMessage WebVie)

高速公路,离开 onMessage 块

Java WebSocket:onMessage 未触发

HTML5 postMessage 和 onmessage API 具体应用

在 onMessage 注释中具有多个数据的 Websocket