Spring 4 WebSocket 配置端口

Posted

技术标签:

【中文标题】Spring 4 WebSocket 配置端口【英文标题】:Spring 4 WebSocket configure port 【发布时间】:2014-09-07 09:01:56 【问题描述】:

使用 Spring 4 我需要配置 WebSocket 使用 HTTP 以外的其他端口。 换句话说,默认情况下用户对 HTTP 和 WebSocket 的访问如下:

http://server:9090/
ws://server:9090/

但我需要执行以下操作:

http://server:9090/
ws://server:9999/

在代码中我只有以下内容:

@Configuration
@EnableWebSocket
public class WebSocketConfig
    implements WebSocketConfigurer  

我也有处理程序:

Handler extends TextWebSocketHandler 

Spring有这种能力吗?

【问题讨论】:

_ 使用 HTTP 以外的其他端口_ - 你能说得更具体些吗? @zeroflagL - 刚刚更新 【参考方案1】:

AFAIK 所有当前的 websocket 实现都依赖于通过 HTTP 的握手。握手后,现有连接被升级。你没有得到一个新的,端口保持不变。基本上所有的 websocket 连接都是从 HTTP 连接开始的。

作为旁注,端口、IP 地址等是服务器的主题,而不是应用程序本身。

也许可以配置您的服务器,以便两个端口可用于一个应用程序,但它们都可以用于 HTTP 和 websocket。另一方面,这可能对您的情况有用。

【讨论】:

好吧,我不在乎是否会暴露第二个 HTTP 端口。但我需要问你如何做到这一点。 @Dewfy 如果您运行 Tomcat,那么复制 server.xml 中的 Connector 条目可能就足够了。【参考方案2】:

ws://协议的Spring WebSocket不同端口

由于限制,并且为了在 App Engine 柔性环境中使用 websocket,应用需要使用实例的公共外部 IP 直接连接到应用实例。这个IP可以从元数据服务器获取。

所有 MVC/Rest (http://) 调用仍应从 8080 提供服务,并且在 App Engine 柔性环境 ws:// 服务器中来自 ws://external_ip:65080

工作代码

https://github.com/kevendra/springmvc-websocket-sample

http://localhost:8080/
ws://localhost:8080/

使用以下 App Engine 需要

http://localhost:8080/
ws://localhost:65080/  - in local
ws://external_ip:65080/ - App engine

参考:

扩展 org.eclipse.jetty.websocket.server.WebSocketHandler 并将服务器上下文启动到 65080,但我正在寻找由 spring 管理的服务器

How do I create an embedded WebSocket server Jetty 9? Spring 4 WebSocket Remote Broker configuration

【讨论】:

嗨。我还需要在 8080 端口和 ws:// 8000 上运行所有 API。我相信你能够做到这一点,但我无法从你的代码中理解你是如何实现这一点的。你能解释一下你的实现背后的基本概念吗?

以上是关于Spring 4 WebSocket 配置端口的主要内容,如果未能解决你的问题,请参考以下文章

如何使用类 + spring 4.0.0 配置 websocket 句柄

netty-websocket-spring-boot-starter不同url端口复用

Spring-websocket 配置 websocket发送消息(群发)

Spring 4 websocket + stomp + rabbitmq 和集群

spring3.x 怎么 整合 websocket

osstatus -9801 workerman websocket 小程序不带端口