确保您已经安装好了Java JDK、Maven以及一个文本编辑器,然后按照以下步骤:
1.创建Maven项目
打开命令行窗口并导航到您想要创建Maven项目的目录。输入以下命令:
mvn archetype:generate -DgroupId=com.example.websocket -DartifactId=websocket-demo -DarchetypeArtifactId=maven-archetype-webapp -DinteractiveMode=false
该命令将使用Maven的标准WebApp原型生成一个名为“websocket-demo”的项目。
2.添加依赖
在项目的pom.xml文件中添加以下依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket</artifactId>
</dependency>
<dependency>
<groupId>org.webjars</groupId>
<artifactId>webjars-locator-core</artifactId>
</dependency>
<dependency>
<groupId>org.webjars</groupId>
<artifactId>sockjs-client</artifactId>
<version>1.0.2</version>
</dependency>
<dependency>
<groupId>org.webjars</groupId>
<artifactId>stomp-websocket</artifactId>
<version>2.3.3</version>
</dependency>
3.编写WebSocket配置类
在您的项目中创建一个类,并添加@Configuration
和@EnableWebSocketMessageBroker
注解。这将为您的应用程序配置WebSocket端点,并启用STOMP消息传输。
@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/ws").withSockJS();
}
@Override
public void configureMessageBroker(MessageBrokerRegistry config) {
config.enableSimpleBroker("/topic");
config.setApplicationDestinationPrefixes("/app");
}
}
代码中的/ws
路径是WebSocket端点的路径,withSockJS()
方法启用了SockJS支持。
configureMessageBroker()
方法配置了消息代理,定义了一个前缀为/topic
的简单消息代理,以支持广播式消息传输。setApplicationDestinationPrefixes()
方法定义了应用程序中接收消息的前缀为/app
。
4.编写控制器类
创建一个控制器类,并在其中编写一些方法,以便客户端可以发送和接收消息。以下是一个基本的示例:
@Controller
public class ChatController {
@MessageMapping("/chat.sendMessage")
@SendTo("/topic/public")
public ChatMessage sendMessage(@Payload ChatMessage chatMessage) {
return chatMessage;
}
@MessageMapping("/chat.addUser")
@SendTo("/topic/public")
public ChatMessage addUser(@Payload ChatMessage chatMessage,
SimpMessageHeaderAccessor headerAccessor) {
headerAccessor.getSessionAttributes().put("username", chatMessage.getSender());
return chatMessage;
}
}
在@MessageMapping
注解中定义了两个端点以接收客户端的消息。
sendMessage()
方法用于将客户端发送的消息广播给所有订阅了/topic/public
主题的客户端。
addUser()
方法用于运行代码以便处理客户端连接。SimpMessageHeaderAccessor
类用于获取用户信息。
5.编写客户端JavaScript
最后,请根据您的需求编写前端代码以连接WebSocket并发送/接收消息。此处只提供一个基本示例:
var socket = new SockJS('/ws');
var stompClient = Stomp.over(socket);
stompClient.connect({}, function(frame) {
console.log('Connected: ' + frame);
stompClient.subscribe('/topic/public', function(chatMessage) {
showMessage(JSON.parse(chatMessage.body));
});
});
function sendName() {
var name = document.getElementById("name").value;
var message = {
sender : name,
content: "has joined the conversation!"
};
stompClient.send("/app/chat.addUser", {}, JSON.stringify(message));
}
function sendMessage() {
var name = document.getElementById("name").value;
var messageContent = document.getElementById('messageContent').value;
var chatMessage = {
sender : name,
content: messageContent
};
stompClient.send("/app/chat.sendMessage", {}, JSON.stringify(chatMessage));
}
function showMessage(message) {
console.log(message);
var response = document.getElementById('response');
var p = document.createElement('p');
p.innerHTML = message.sender + ": " + message.content;
response.appendChild(p);
}
以上例子会让用户输入名字、消息内容,然后将消息传送给服务器。在接收到服务器返回消息后,它还会在页面上显示它们。
在以上控制器类和客户端JavaScript的示例中,我们展示了如何实现一对一聊天和公告。其中,通过建立WebSocket连接实现实时消息传递,通过STOMP协议实现消息的订阅和广播。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Springboot+WebSocket实现一对一聊天和公告的示例代码 - Python技术站