我编写了一个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请求。服务器拒绝无效请求,并关闭我的连接。但是,当我...
如@Joakim Erdfelt在Javascript上方的评论中所述,默认情况下使用Sec-Websocket-Extension:permessage-deflate。可能不是设置它的最佳方法,但我通过添加以下代码更新了Java代码: