在春天运行 javax.websocket 端点?
Posted
技术标签:
【中文标题】在春天运行 javax.websocket 端点?【英文标题】:running a javax.websocket endpoint in spring? 【发布时间】:2020-05-05 12:23:27 【问题描述】:我已经按照本教程实现了一个 websocket 服务器:https://www.baeldung.com/java-websockets
现在我该如何运行这个应用程序?我正在使用 Spring,我的主要功能如下所示:
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class App
public static void main(String[] args)
SpringApplication.run(App.class, args);
我的 websocket 端点看起来像这样:
import java.io.IOException;
import javax.websocket.*;
import javax.websocket.server.*;
@ServerEndpoint(
value = "/chat/username",
decoders=MessageDecoder.class,
encoders = MessageEncoder.class
)
public class Controller
// ...
现在当我运行它并尝试像这样连接到 websocket 端点时:wsta ws://localhost:8080/chat/aa -I
我收到以下错误:
WebSocket 升级请求
---
主机:本地主机:8080
连接:升级
升级:websocket
Sec-WebSocket-版本:13
Sec-WebSocket-Key: ...
来源:http://localhost
WebSocket 升级响应
---
404 未找到
变化:OriginAccess-Control-Request-MethodAccess-Control-Request-Headers
内容类型:application/json
传输编码:分块
日期:格林威治标准时间 2020 年 5 月 5 日星期二 12:12:52
WebSocketError:WebSocket 响应错误
这里的答案 (https://***.com/a/57924245/10551293) 说您通过 ws://localhost:8080/context/chat/aa
访问 webscoket 端点。什么是上下文,如何让我的服务器运行并接受传入连接?
【问题讨论】:
【参考方案1】:为了让OP中提到的Baeldung教程运行
我必须为 spring-boot-starter-websocket
添加一个 maven 依赖项到 pom.xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket</artifactId>
</dependency>
添加一个弹簧@Configuration
,其中添加了@EnableWebSocket
,并实例化了一个ServerEndpointExporter
bean:
@Configuration
@EnableWebSocket
public class WsConfig
@Bean
public ServerEndpointExporter serverEndpoint()
return new ServerEndpointExporter();
另外端点控制器必须是弹簧@Component
:
@ServerEndpoint(
value = "/chat/username",
decoders=MessageDecoder.class,
encoders = MessageEncoder.class
)
@Component
public class Controller
...
最终在
ws://localhost:8080/chat/torvalds
下可以访问 websocket 端点
【讨论】:
非常感谢,这就是我所缺少的!以上是关于在春天运行 javax.websocket 端点?的主要内容,如果未能解决你的问题,请参考以下文章
没有'javax.websocket.server.ServerContainer' ServletContext 属性 - Glassfish 4.1