如何从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)的主要内容,如果未能解决你的问题,请参考以下文章
javascript 提供用于从React-Native WebView发送和接收消息的示例实现(使用postMessage / onMessage WebVie)