实际上,我在 WebSocket 应用程序中遇到以下问题,当我使用 JavaEE WebSocket API 的依赖项时,我有以下组件:
@ServerEndpoint("/echo")
public class Echo {
@OnMessage
public void onMessage(String message) {
LOG.info("Message received: " + msg);
String response = null;
try {
InputStream stream = getClass().getClassLoader().getResourceAsStream("image.jpg");
byte[] bytes = Base64.encodeBase64(IOUtils.toByteArray(stream));
response = String.format("data:image/jpg;base64,%s", new String(bytes));
} catch (IOException e) {
e.printStackTrace();
}
if (response != null) {
byte[] bytes = response.getBytes();
ByteBuffer byteBuffer = ByteBuffer.wrap(bytes, 0, bytes.length);
this.session.getAsyncRemote().sendBinary(byteBuffer);
} else {
LOG.info("Not sent message!");
}
}
}
此端点接收文本平面消息,然后加载Classpath
中的图像,将其转换为Base64
,最后使用图像信息回复BinaryFrame
。
我的客户端代码也是 HTML 和 Javascript 。
var socket = new WebSocket('ws://localhost:8084/webdemo/echo');
socket.binaryType = "arrayBuffer";
socket.onopen = function (event) {
console.log('WebSocket connected!');
};
socket.onmessage = function (event) {
console.log('Message received', event.data);
};
function sendMessage() {
console.log('Send message.');
socket.send('This is a test message!');
}
sendMessage();
使用此代码,我获得连接并发送以下消息"This is a test message!"
,此消息显示在服务器控制台上。我显示BinaryFrame
的数据类型,并在Web浏览器的控制台中显示Blob
。
然后,问题是:
如何以BinaryFrame
格式发送ArrayBuffer
响应?
我不想要获得Blob格式。
如果我的英语不好,我很抱歉:我正在研究它
更新
echo类:
@ServerEndpoint("/echo")
public class Echo {
@OnMessage
public void onMessage(String message) {
LOG.info("Message received: " + msg);
try {
InputStream stream = getClass().getClassLoader().getResourceAsStream("image.jpg");
byte[] bytes = IOUtils.toByteArray(stream);
ByteBuffer byteBuffer = ByteBuffer.wrap(bytes, 0, bytes.length);
this.session.getAsyncRemote().sendBinary(byteBuffer);
} catch (IOException e) {
e.printStackTrace();
}
}
}
更新后,对base 64中的二进制框架进行编码,并在<img>
标记中显示图片。