文档章节

Spring with WebSocket

Finley.Hamilton
 Finley.Hamilton
发布于 2014/11/11 10:25
字数 430
阅读 1485
收藏 7

消息架构

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();
	}

© 著作权归作者所有

Finley.Hamilton

Finley.Hamilton

粉丝 5
博文 45
码字总数 15431
作品 0
广州
私信 提问
websocket:handlers 不起作用

@jack_jones 你好,想跟你请教个问题: 我在使用Spring websocket 时遇到了websocket:handlers不起作用, 其中Spring版本为4.1.6.RELEASE...

TreasureWe
2016/02/26
918
2
spring-boot-test测试时出现不能创建bean的问题

最近使用spring-boot写项目,集成了spring-boot-starter-websocket和spring-boot-starter-test; websocket配置如下 正常运行spring-boot时websocket不报错 但是使用单元测试的时候报错 去掉w...

bithup
2018/04/08
855
1
Yeauty/netty-websocket-spring-boot-starter

netty-websocket-spring-boot-starter 中文文档 About netty-websocket-spring-boot-starter will help you develop WebSocket server by using Netty in spring-boot,it is easy to develop......

Yeauty
2018/09/24
0
0
实时通信技术之websocket

本文章即从4个方面带大家了解websocket: websocket是什么? 为什么需要 WebSocket ? websocket的优点与缺点? websocket的相关使用(客户端与服务器端)? websocket的相关协议与规范? 一...

一看就喷亏的小猿
2018/11/03
0
0
日志工具 - boot-websocket-log

boot-websocket-log spring boot系统中使用websocket技术实时输出系统日志到浏览器端 本项目使用如下相关技术: 1.websocket技术:WebSocket(stopmp服务端),stomp协议,sockjs.min.js,s...

KL博客
2018/08/24
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Docker搭建Mysql集群、主从同步复制

1、创建数据挂载点: mkdir /opt/mysql-master/mysql、/opt/mysql-master/conf.d、/opt/mysql-slave/conf.d、/opt/mysql-slave/conf.d 2、分别在master、slave节点文件目录conf.d下创建touch......

WALK_MAN
16分钟前
1
0
手把手教你做中间件开发(分布式缓存篇)-借助redis已有的网络相关.c和.h文件,半小时快速实现一个epoll异步网络框架,程序demo

本文档配合主要对如下demo进行配合说明: 借助redis已有的网络相关.c和.h文件,半小时快速实现一个epoll异步网络框架,程序demo 0. 手把手教你做中间件、高性能服务器、分布式存储技术交流群 ...

y123456yz
17分钟前
1
0
阿里技术男的成长史:越想证明自己死得越快……

在上海工作8年后,身为部门经理的钱磊,管理着一家ERP公司的百十来号员工,“再往上爬就是老板和他儿子了……从这个领域的技术角度来讲算是做到了顶。”05年,钱磊就开始关注一家名字奇怪,做...

阿里云云栖社区
21分钟前
2
0
Spring-boot单元测试(私有方法测试)

Spring-boot的单元测试网上有了很多,当项目是可以使用spring-boot正常运行时,只要在测试类上添加如下配置就使用@Autowired的方式进行单元测试 @RunWith(SpringJUnit4ClassRunner.class)@...

琴兽
38分钟前
1
0
spring cloud(第一部)框架概述

关于微服务 近几年,'微服务'这个词越来越多的被身边的人所提及,到底什么是微服务,为什么微服务总是伴随着spring cloud被人们所提及,这里笔者结合多年的技术经历跟大家分享下自己的理解:...

白中墨
39分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部