Stomp.over(socket)是怎么个流程
时间: 2023-12-15 18:04:18 浏览: 234
Stomp.over(socket)是Stomp.js库中用于建立Stomp客户端与WebSocket之间的桥梁。它的流程如下所示:
1. 创建基于WebSocket的Stomp客户端
Stomp.over(socket)会创建一个Stomp客户端,该客户端基于WebSocket来进行通信。它会将WebSocket对象作为参数传入,Stomp客户端会通过该WebSocket对象与服务器进行通信。
2. 连接到服务器
接下来,Stomp.over(socket)会调用Stomp客户端的connect()方法,该方法会使用WebSocket对象连接到服务器。在这个过程中,Stomp客户端会向服务器发送CONNECT帧,以建立与服务器的连接。
3. 订阅消息
一旦Stomp客户端与服务器建立连接,它就可以订阅服务器发送的消息。Stomp.over(socket)会调用Stomp客户端的subscribe()方法,该方法会向服务器发送SUBSCRIBE帧,以订阅服务器发送的消息。
4. 发布消息
Stomp.over(socket)也可以使用Stomp客户端向服务器发布消息。它会调用Stomp客户端的send()方法,该方法会向服务器发送SEND帧,以发布消息。
总的来说,Stomp.over(socket)的流程就是创建一个基于WebSocket的Stomp客户端,并与服务器建立连接、订阅消息以及发布消息。
相关问题
STOMP-over-WebSocket
STOMP-WebSocket 是一种协议,它结合了 STOMP(Simple Text Oriented Messaging Protocol)和 WebSocket 技术。这种组合使得客户端和服务器之间能够通过 WebSocket 连接进行高效的、双向的通信。
### STOMP 简介
STOMP 是一种简单的文本导向的消息协议,主要用于消息中间件系统,如 ActiveMQ、RabbitMQ 等。它定义了一种轻量级的消息传递机制,支持发布/订阅模型和点对点模型。
### WebSocket 简介
WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议。与 HTTP 不同,WebSocket 允许服务器主动向客户端推送数据,而不需要客户端不断地轮询服务器。这使得 WebSocket 非常适合需要实时更新的应用,如在线聊天、股票行情推送等。
### STOMP-over-WebSocket 的优势
1. **实时性**:由于 WebSocket 是全双工的,因此 STOMP-over-WebSocket 可以提供比传统 HTTP 轮询更实时的通信体验。
2. **高效性**:相比于传统的 HTTP 请求,WebSocket 减少了握手和头部信息的开销,提高了数据传输的效率。
3. **简单性**:STOMP 提供了一种简单且易于理解的消息传递模型,使得开发者可以更容易地实现复杂的消息传递逻辑。
4. **兼容性**:STOMP-over-WebSocket 可以在现有的 WebSocket 基础设施上运行,无需额外的配置或修改。
### 使用场景
1. **即时通讯应用**:如在线聊天室、客服系统等。
2. **实时通知系统**:如股票行情推送、新闻推送等。
3. **游戏开发**:如多人在线游戏的状态同步。
4. **物联网(IoT)**:设备之间的实时数据交换。
### 示例代码
以下是一个简单的 JavaScript 示例,展示了如何使用 STOMP-over-WebSocket 进行消息订阅和发送:
```javascript
// 创建 WebSocket 连接
const socket = new WebSocket('ws://yourserver.com/stomp');
// 当 WebSocket 连接打开时
socket.onopen = function() {
console.log('WebSocket connection opened');
// 创建 STOMP 客户端
const client = Stomp.over(socket);
// 连接到 STOMP 服务器
client.connect({}, function(frame) {
console.log('Connected: ' + frame);
// 订阅主题
client.subscribe('/topic/messages', function(message) {
console.log('Received message: ' + message.body);
});
// 发送消息到主题
client.send('/app/messages', {}, JSON.stringify({'content': 'Hello, World!'}));
});
};
// 处理 WebSocket 错误
socket.onerror = function(error) {
console.error('WebSocket error: ' + error);
};
```
###
Spring stomp 如何编写一个websocket
Spring提供了一个集成了STOMP(Simple Text Oriented Messaging Protocol)的WebSocket支持,可以用于构建实时的、交互式的Web应用程序。下面是一个简单的Spring Boot应用程序,演示如何构建一个WebSocket端点:
1. 首先,在pom.xml文件中添加以下依赖项:
```
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket</artifactId>
</dependency>
```
2. 创建一个WebSocket配置类,用于配置WebSocket端点和消息代理:
```java
@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {
@Override
public void configureMessageBroker(MessageBrokerRegistry config) {
config.enableSimpleBroker("/topic");
config.setApplicationDestinationPrefixes("/app");
}
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/websocket").withSockJS();
}
}
```
- `@EnableWebSocketMessageBroker` 注解用于启用WebSocket消息代理。
- `configureMessageBroker()` 方法用于配置消息代理。在上面的例子中,使用了简单的内存消息代理,并将消息前缀设置为“/topic”和“/app”。
- `registerStompEndpoints()` 方法用于注册WebSocket端点。在上面的例子中,将端点设置为“/websocket”,并启用SockJS支持。
3. 创建一个控制器类,用于处理WebSocket请求:
```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() + "!");
}
}
```
- `@MessageMapping` 注解用于指定WebSocket请求的目标。
- `@SendTo` 注解用于指定将响应发送到的消息代理目标。
4. 创建一个消息模型类:
```java
public class HelloMessage {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
```
5. 创建一个响应模型类:
```java
public class Greeting {
private String content;
public Greeting(String content) {
this.content = content;
}
public String getContent() {
return content;
}
}
```
6. 最后,创建一个HTML文件,用于展示WebSocket请求和响应:
```html
<!DOCTYPE html>
<html>
<head>
<title>WebSocket Example</title>
<script src="/webjars/jquery/jquery.min.js"></script>
<script src="/webjars/sockjs-client/sockjs.min.js"></script>
<script src="/webjars/stomp-websocket/stomp.min.js"></script>
<script>
var stompClient = null;
function connect() {
var socket = new SockJS('/websocket');
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 disconnect() {
if (stompClient != null) {
stompClient.disconnect();
}
console.log("Disconnected");
}
function sendName() {
var name = $("#name").val();
stompClient.send("/app/hello", {}, JSON.stringify({'name': name}));
}
function showGreeting(message) {
$("#greetings").append("<tr><td>" + message + "</td></tr>");
}
</script>
</head>
<body>
<div>
<label for="name">Name:</label>
<input type="text" id="name">
<button onclick="connect();">Connect</button>
<button onclick="disconnect();">Disconnect</button>
</div>
<div>
<table>
<thead>
<tr>
<th>Greetings</th>
</tr>
</thead>
<tbody id="greetings">
</tbody>
</table>
</div>
</body>
</html>
```
在上面的HTML文件中,使用了SockJS和STOMP库来连接WebSocket端点,并在发送请求时使用JSON格式来序列化请求模型。
以上就是一个简单的Spring Boot应用程序,演示了如何构建WebSocket端点。你可以根据需要进行更改和扩展。
阅读全文