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。这不是您所需要的,但我认为它会提供一个好主意。
我是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。这不是您所需要的,但我认为它会提供一个好主意。