互联网技术 · 2024年2月7日

WebSocket配置常见问题

今天来整理一些我在工作中配置上遇到的一些问题。

Q1使用nginx代理后不能访问。报错WARNING:tornado.access:400 GET /ws (127.0.0.1) 0.79ms  或者连接失败后会反复发起连接请求。

需要在nginx的location中新增如下配置

# websocket

proxy_http_version 1.1;

proxy_set_header Upgrade $http_upgrade;

proxy_set_header Connection “upgrade”;

Q2 跨域问题(spring websocket)

经查阅官方文档springwebsocket 4.1.5版本前默认支持跨域访问,之后的版本默认不支持跨域,需要设置

.setAllowedOrigins(“*”)

@Override

public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {

registry.addHandler(myWebSocketHandler(), “/echo.do”).setAllowedOrigins(“*”).addInterceptors(new HandshakeInterceptor());

registry.addHandler(myWebSocketHandler(), “/echo”).setAllowedOrigins(“*”).addInterceptors(new HandshakeInterceptor())

.withSockJS();

}

Q3 *.do配置导致sockjs失效问题(spring websocket)

web.xml中添加如下配置

dispatcher

/sockjs/*

websocket配置类中路径中不加sockjs

registry.addHandler(myWebSocketHandler(),  “/echo”).setAllowedOrigins(“*”).addInterceptors(new HandshakeInterceptor())

.withSockJS(); 

前端调用时应加上sockjs

websocket = new SockJS(“http://127.0.0.1:8080/WebSocketTest001/sockjs/echo”);

Q4 一个websocketsession对应多个session的情况 

这是由于尽管每次都能保证有一个websocketsession存在,但客户端没连接一次tomcat都建立一个链接,除非你在请求头里添加cookie:JSESSIONID=xxxxxx

Q5 能收到客户端消息,后台也显示发送,但是客户端收不到 

这个问题经我个人观察和猜测,应该是websocketsession没有成功关闭或者成功关闭但是和一个websocketsession对应多个session有关,因为我把上面的问题解决了之后,这个问题也没出现过了。

希望这些问题的解决方法对大家有帮助

OpenMagic API

Need more than content? Move into the product flow.

If you are here for model access, pricing, developer docs, or the future API console, the dedicated product path now lives on api.openmagic.ai.

登录免费注册