spring websocket断网服务器怎么响应

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spring websocket断网服务器怎么响应相关的知识,希望对你有一定的参考价值。

参考技术A 建议按以下方法查看是什么原因并解决:
1、查看手机是否欠费,欠费的手机是无法连接数据网络的,需要充值。
2、网络延迟造成的刷新失败,可以打开手机的飞行模式,五秒后再关闭,然后重新连接网络或者重启一下手机。
3、网络设置没有设置好,可以拨打手机卡所属运营商,让客服发送上网设置的相关数据后根据提示设置。
4、如果连接的是无线网络,那么需要查看一下手机wifi密码输入和无线路由器的上网设置是否都正确,其他设备是否可以通过该wifi上网,建议把手机的wifi密码删除再重新输入一遍,或者重启、重新设置一下无线路由器。

已解决 - 如何在 Spring 中自定义 WebSocket 升级请求的 HTTP 响应?

【中文标题】已解决 - 如何在 Spring 中自定义 WebSocket 升级请求的 HTTP 响应?【英文标题】:SOLVED - How to customize HTTP response for WebSocket upgrade request in Spring? 【发布时间】:2020-03-05 12:50:15 【问题描述】:

在我的WebSocketConfigurer 实现中,我有一个这样配置的 WebSocket 端点

public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) 
        registry.addHandler(new ExceptionWebSocketHandlerDecorator(myWebSocketHandler), "/ws/")
                .setAllowedOrigins("*")
                .addInterceptors(myHandshakeInterceptor);
    

myWebSocketHandler#beforeHandshake 中有一些检查,我想向用户发送一条错误消息,以防服务器决定拒绝升级连接。这个我试过了

response.setStatusCode(HttpStatus.BAD_GATEWAY);
try 
    response.getBody().write("Error".getBytes());
    response.getBody().flush();
 catch (IOException e) 
    log.error("Error writing response", e);

return false;

状态码有效,但正文为空。如何发送?

编辑:原来问题是我使用 Firefox 控制台来检查响应,但它没有显示任何内容。如果我使用 cURL 发出相同的请求,那么一切正常,我会看到我写到响应正文的消息!

【问题讨论】:

你是如何检查身体是空的? Spring 拦截器没有修改响应体 我在 Firefox 控制台中检查了响应。原来它没有显示响应正文。当我使用 curl 时,一切正常,我可以阅读响应。 您使用了拦截器或自定义处理程序? 【参考方案1】:

要更新响应正文,您需要编写自定义 RequestUpateStrategy。 正如来自 AbstractHandshakeHandler 的春季官方文档中所说:

The actual upgrade is delegated to a server-specific RequestUpgradeStrategy, which will update the response as necessary and initialize the WebSocket.

如果您使用 Tomcat 作为 servlet 容器,您可以扩展 TomcatRequestUpgradeStrategyclass 并提供您自己的逻辑如何处理 websocket 升级。

对于每个 servlet 容器,都有 RequestUpgradeStrategy 的实现 documentation

【讨论】:

感谢您的回复。不幸的是,在 HandshakeHandler 或 RequestUpgradeStrategy 中编写响应正文都不起作用。我仍然得到一个空的身体。 你能分享一个例子吗? 这是我的自定义处理程序和策略(代码太长,无法在评论中发布,抱歉)pastebin.com/scCcnLBU 可以分享github链接吗? 请看 AbstractHandshakeHandler 类方法 protected void handleInvalidUpgradeHeader(ServerHttpRequest request, ServerHttpResponse response)

以上是关于spring websocket断网服务器怎么响应的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 spring+stomp+sockjs 获得 websocket 响应

Flux 响应而不是 WebSocket (Spring boot)

前端网络监控与断网重链

WebSocket握手期间出错:意外的响应代码:400 Spring boot websockets

WebSocket 握手 - 意外响应代码 200 - AngularJs 和 Spring Boot

已解决 - 如何在 Spring 中自定义 WebSocket 升级请求的 HTTP 响应?