Spring 引导 WebSocket 问题

Spring Boot WebSocket Questions

我是Spring框架的新手,现在我为一个新项目选择了它。

该项目实际上是一个在线咨询应用程序。当客户选择打开页面查询时window,将为其分配一名咨询工程师(多对一)。综上所述,此应用程序需要考虑以下因素。

1- 客户匿名连接和咨询工程师身份验证。 2- 一个工程师可以同时服务多个客户。 3-可以配置分配客户的方式。 4- WebSocket 会话应在 HTTP 会话过期时保持打开状态。

所以我有两个问题:

对于 1-3 项,我不确定 Spring 中我应该选择 STOMP 还是纯 WebSocket。 STOMP 似乎更高级,但更可能满足一般消息传递要求(主题、订阅……等)。另一方面,WebSocket 更简单、更灵活。不知道这个咨询应用哪个更好?

对于第 4 点,会话已过期。 google 结果表明 spring-session。但我只能找到它关于集成 spring-session 与 STOMP 的教程。如果 WebSocket 是更好的选择,我如何将 spring-session 与 Plain WebSocket 集成?

谢谢

当您谈论 websocket 时,您必须记住它是一种简单且 "raw" 的通信协议,没有许多已定义的消息控件。如果您选择使用普通的 websocket,您应该能够使用基本身份验证 [1] 进行身份验证。在这种情况下,您的 websocket 连接一旦打开,将保持打开状态并无限期工作。

但是您也可以控制消息流,决定如何为每条消息指定目标。这就是 STOMP 应该帮助你的地方。

使用 STOMP,您可以定义 "channels" 客户和咨询工程师 "subscribe" 并开始沟通。您还可以使用来自经过身份验证的 Spring 安全会话的 "Principal" 发送私人消息。

所以,回答你的观点:

1- anonymity connections for customer and authentication for consulting engineers.

可以在 Spring Websocket 配置 [2] 中定义多个端点。您可以尝试使用 ChannelInterceptorAdapter.

的实现仅通过其中一个端点请求身份验证

2- one engineer can serve several customers at a time.

使用频道的定义,在STOMP的帮助下,您可以在多个频道中订阅工程师,每个频道为一个客户......或者在它们之间使用私人消息。

3- the way to assign customer could be configured.

我不确定你的意思...但是将客户分配给 "channel".

应该很容易

4- WebSocket session should remain open while HTTP session expired.

HTTP 会话仅在初始过程中使用,用于连接到 websocket。之后,websocket 将保持打开状态,或者,如果您使用 SockJS 进行回退,HTTP 会话将不断更新。

我使用 Spring API 编写了一个 example of websocket server and client。这不是您所需要的,但我认为它会提供一个好主意。