springboot实现长链接
时间: 2023-11-05 20:00:23 浏览: 82
Spring Boot可以通过WebSocket来实现长链接。
WebSocket是一种在单个TCP连接上进行全双工通信的协议。它提供了一种在浏览器和服务器之间创建持久性连接的方式,这样服务器就可以主动向浏览器发送数据,而不需要浏览器每次都向服务器发起请求。
在Spring Boot中,我们可以使用Spring WebSocket来实现WebSocket功能。以下是一个简单的示例:
1.添加依赖
在pom.xml文件中添加以下依赖:
```xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket</artifactId>
</dependency>
```
2.创建WebSocket配置类
创建一个WebSocket配置类,继承自`AbstractWebSocketMessageBrokerConfigurer`,并在其中添加`@EnableWebSocketMessageBroker`注解。
```java
@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer {
@Override
public void configureMessageBroker(MessageBrokerRegistry config) {
config.enableSimpleBroker("/topic");
config.setApplicationDestinationPrefixes("/app");
}
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/ws").withSockJS();
}
}
```
在上面的代码中,我们配置了一个简单的消息代理,用于将消息从服务器发送到订阅了特定主题的客户端。我们还注册了一个Stomp端点,以便客户端可以连接到WebSocket服务器。
3.创建WebSocket控制器
创建一个WebSocket控制器,并在其中添加`@Controller`和`@MessageMapping`注解。`@MessageMapping`注解指定了一个消息映射路径,当客户端发送消息到该路径时,该方法就会被调用。
```java
@Controller
public class WebSocketController {
@MessageMapping("/hello")
@SendTo("/topic/greetings")
public Greeting greeting(HelloMessage message) throws Exception {
Thread.sleep(1000); // simulated delay
return new Greeting("Hello, " + message.getName() + "!");
}
}
```
在上面的代码中,我们创建了一个`greeting`方法,用于接收客户端发送的`HelloMessage`消息,并返回一个`Greeting`消息。`@SendTo`注解指定了返回的消息将被发送到`/topic/greetings`主题。
4.创建客户端
在客户端,我们需要使用`Stomp`协议连接到WebSocket服务器,并订阅`/topic/greetings`主题,以接收来自服务器的消息。以下是一个简单的JavaScript客户端示例:
```javascript
var stompClient = null;
function connect() {
var socket = new SockJS('/ws');
stompClient = Stomp.over(socket);
stompClient.connect({}, function (frame) {
console.log('Connected: ' + frame);
stompClient.subscribe('/topic/greetings', function (greeting) {
showGreeting(JSON.parse(greeting.body).content);
});
});
}
function showGreeting(message) {
var response = document.getElementById('response');
var p = document.createElement('p');
p.style.wordWrap = 'break-word';
p.appendChild(document.createTextNode(message));
response.appendChild(p);
}
function sendName() {
var name = document.getElementById('name').value;
stompClient.send("/app/hello", {}, JSON.stringify({ 'name': name }));
}
```
在上面的代码中,我们使用`SockJS`和`Stomp`库来连接到WebSocket服务器,并订阅`/topic/greetings`主题。我们还定义了一个`showGreeting`函数,用于将来自服务器的消息显示在页面上。最后,我们定义了一个`sendName`函数,用于向服务器发送`HelloMessage`消息。
5.测试
现在,我们可以启动应用程序,并在浏览器中打开`http://localhost:8080`。在页面上,我们可以输入一个名字,然后点击“Send”按钮,向服务器发送消息。服务器将返回一个“Hello”消息,该消息将显示在页面上。
这就是如何在Spring Boot中实现WebSocket长链接的简单示例。
阅读全文