让Jetty Websocket讲与JavaScript Websocket相同的语言

问题描述 投票:0回答:1

我编写了一个Jetty Websocket客户端,该客户端正在连接到远程服务器并尝试发送JSON请求。服务器拒绝无效请求,并关闭我的连接。但是,当我使用Javascript客户端发送完全相同的JSON时,效果很好。因此,现在我挠头了,是Jackson 2对JSON和JSON.stringify()的编码吗? (差异显示两个JSON输出完全相同,没有差异)。 Javascript Websockets和Jetty之间的默认配置是否不同?我肯定想念什么,把头撞在墙上。

Java Side Snippet:

final String wsAddress = "ws://" + wssUrl + "/ws";
    final WebSocketClient client = new WebSocketClient();
    final WSEventSocket socket = new WSEventSocket(loginRequest);
    try {
        client.start();

        final ClientUpgradeRequest request = new ClientUpgradeRequest();
        final URI wsUri = new URI(wsAddress);

        logger.info("Connecting to {}", wsUri);
        final Future<Session> session = client.connect(socket, wsUri, request);

        final String requestjson = mapper.writeValueAsString(wsRequestPojo);
        final Future<Void> fut = session.getRemote().sendStringByFuture(requestjson);
...

Java脚本摘要:

var wsRequestJson = {...Use output from Java Side...}
var mySock = new WebSocket("ws://" + wsocketUrl + "/ws");
mySock.onmessage = function(evt) { console.log(evt.data); }; mySock.onclose = function() { console.log("CLOSED"); };
mySock.send(JSON.stringify(wsRequestJson));

JavaScript端工作正常,Java端未正确编码数据。我尝试过类似JSON到字节数组之类的东西,但运气不好。我有线了两个事务,然后看到了WebSocket推送和响应。在Java中,我看到的有效载荷看上去完全类似于JSON,而Wireshark对其进行了解密。在Javascript数据包上,我看到了某种类型的编码数据\ 214P \ 311n \ 3020 \ 024 ...我读了一些有关Masked Payloads的信息,并且两个客户端都发送带有Masking-Keys的Masked Payloads,也许与此有关?] >

任何想法如何让Java Jetty端以类似方式编码数据?甚至JavaScript端正在使用哪种类型的编码?我现在可能已经想不通了...

谢谢!

我编写了一个Jetty Websocket客户端,该客户端正在连接到远程服务器并尝试发送JSON请求。服务器拒绝无效请求,并关闭我的连接。但是,当我...

javascript java json websocket jetty
1个回答
0
投票

如@Joakim Erdfelt在Javascript上方的评论中所述,默认情况下使用Sec-Websocket-Extension:permessage-deflate。可能不是设置它的最佳方法,但我通过添加以下代码更新了Java代码:

© www.soinside.com 2019 - 2024. All rights reserved.