Spring with WebSocket

消息架构

Today REST is a widely accepted, understood, and supported architecture for building web applications. It is an architecture that relies on having many URLs (nouns), a handful of HTTP methods (verbs), and other principles such as using hypermedia (links), remaining stateless, etc.

REST的架构是通过很多URL去实现的

By contrast a WebSocket application may use a single URL only for the initial HTTP handshake. All messages thereafter share and flow on the same TCP connection. This points to an entirely different, asynchronous, event-driven, messaging architecture. One that is much closer to traditional messaging applications (e.g. JMS, AMQP).

WebSocket的握手却只需要一次HTTP请求

子协议

需要上层的子协议去解析进来的消息

This is comparable to how most web applications today are written using a web framework rather than the Servlet API alone.

STOMP (Spring支持)

Spring里头关于WebSocket几个重要的概念

WebSocketHandler

定义进来的消息怎么处理

WebSocketConfigurer

Provides methods for configuring WebSocketHandler request mappings.

这个接口只有一个方法:

addHandler(WebSocketHandler webSocketHandler, java.lang.String... paths)

Configure a WebSocketHandler at the specified URL paths.

建立连接

要在服务器端准备好WebSocket Engine

根据具体的服务器不一样办法也不一样,因为WebSocket是http的Upgrade协议,所以需要UpgradeStrategy也不难理解


@Configuration
@EnableWebSocket
public class WebSocketConfig implements WebSocketConfigurer {

    @Override
    public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
        registry.addHandler(echoWebSocketHandler(),
            "/echo").setHandshakeHandler(handshakeHandler()).withSocketJS();
    }

    @Bean
    public DefaultHandshakeHandler handshakeHandler() {

        WebSocketPolicy policy = new WebSocketPolicy(WebSocketBehavior.SERVER);
        policy.setInputBufferSize(8192);
        policy.setIdleTimeout(600000);

        return new DefaultHandshakeHandler(
                new JettyRequestUpgradeStrategy(new WebSocketServerFactory(policy)));
    }

}

WebSocketMessageBrokerConfigurer

它居然不是WebSocketConfigurer的子类。。。

两个方法: configureMessageBroker 服务器开放的端口让客户端监听,也就是说写的时候往这里写

@Override
    public void configureMessageBroker(MessageBrokerRegistry config) {
        config.setApplicationDestinationPrefixes("/app");
        config.enableSimpleBroker("/queue", "/topic");
    }

registerStompEndpoints 服务器要监听的端口,message会从这里进来,要对这里加一个Handler

@Override
	public void registerStompEndpoints(StompEndpointRegistry registry) {
		registry.addEndpoint("/hello").withSockJS();
	}

转载于:https://my.oschina.net/zuoyc/blog/342942

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring WebSocketSpring 框架提供的 WebSocket 实现,可以很方便地在 Spring 应用程序中使用。下面是使用 Spring WebSocket 的一些基本步骤: 1. 添加 Maven 依赖:在 pom.xml 文件中添加如下依赖项: ``` <dependency> <groupId>org.springframework</groupId> <artifactId>spring-websocket</artifactId> <version>${spring.version}</version> </dependency> ``` 2. 创建 WebSocket 配置类:创建一个配置类,用于配置 WebSocket 相关的组件和处理器,例如: ``` @Configuration @EnableWebSocket public class WebSocketConfig implements WebSocketConfigurer { @Override public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) { registry.addHandler(myWebSocketHandler(), "/my-websocket"); } @Bean public WebSocketHandler myWebSocketHandler() { return new MyWebSocketHandler(); } } ``` 3. 创建 WebSocket 处理器:创建一个实现了 WebSocketHandler 接口的 WebSocket 处理器,用于处理 WebSocket 连接和消息,例如: ``` public class MyWebSocketHandler implements WebSocketHandler { @Override public void afterConnectionEstablished(WebSocketSession session) { System.out.println("WebSocket connected"); } @Override public void handleMessage(WebSocketSession session, WebSocketMessage<?> message) { System.out.println("Received message: " + message.getPayload()); session.sendMessage(new TextMessage("Hello, I am WebSocket server!")); } @Override public void handleTransportError(WebSocketSession session, Throwable exception) { System.out.println("WebSocket error: " + exception.getMessage()); } @Override public void afterConnectionClosed(WebSocketSession session, CloseStatus status) { System.out.println("WebSocket closed with status: " + status); } @Override public boolean supportsPartialMessages() { return false; } } ``` 4. 在客户端使用 WebSocket:在客户端使用 WebSocket 连接到服务器,例如: ``` var ws = new WebSocket("ws://localhost:8080/my-websocket"); ws.onopen = function() { console.log("WebSocket connected"); ws.send("Hello, I am WebSocket client!"); }; ws.onmessage = function(event) { console.log("Received message: " + event.data); }; ws.onerror = function(event) { console.log("WebSocket error: " + event.data); }; ws.onclose = function(event) { console.log("WebSocket closed with status: " + event.code); }; ``` 以上只是一个简单的示例,实际上使用 Spring WebSocket 还有很多细节需要考虑,例如消息编码和解码、消息广播等等。需要根据实际需求和应用场景来设计和实现 WebSocket 应用程序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值