Springboot+WebSocket实现一对一聊天和公告的示例代码

yizhihongxing

确保您已经安装好了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技术站

(0)
上一篇 2023年5月28日
下一篇 2023年5月28日

相关文章

  • 详解ASP.NET MVC下的异步Action的定义和执行原理

    下面是关于 ASP.NET MVC 下的异步 Action 的定义和执行原理的详细解释: 异步 Action 是什么? 异步 Action 是指在执行某个 Action 时,不会阻塞当前线程,而会在另一个线程上执行。由于异步 Action 能够让当前线程不停顿等待,而是让 CPU 转而去执行其他代码,因此可以提高 Web 应用的并发处理能力。 定义异步 Ac…

    jquery 2023年5月27日
    00
  • 使用jQuery的将桌面应用程序引入浏览器

    使用jQuery将桌面应用程序引入浏览器是一种很有趣的方式,可以在网页中实现与传统桌面应用程序一样的功能和交互体验。下面是一个简单的攻略,可以让您开始使用jQuery开发您自己的桌面应用程序: 第一步:引入jQuery库 在HTML文件的头部,需要引入jQuery库文件,例如: <script src="https://code.jquery…

    jquery 2023年5月28日
    00
  • jQuery before()方法

    jQuery的before()方法可以用来在指定元素之前插入新的内容或元素。下面是before()方法的完整攻略: 基础语法 $(selector).before(content); 参数说明: selector: 必需,用于选择需要插入到其前面的元素。 content: 在每个匹配的元素之前插入的内容/元素。可以是文本、HTML字符串、jQuery对象。 …

    jquery 2023年5月12日
    00
  • 基于JQuery实现分隔条的功能

    实现分隔条的功能可以通过JQuery中的UI组件Resizable实现,以下是具体的步骤: 引入JQuery和JQueryUI库 在head标签中引入JQuery和JQueryUI的库文件。 <script src="https://code.jquery.com/jquery-3.4.1.min.js"></scrip…

    jquery 2023年5月28日
    00
  • jQWidgets jqxValidator hideHint()方法

    jQWidgets jqxValidator hideHint()方法 jqxValidator是jQWidgets提供的一款表单验证插件,hideHint()方法是jqxValidator的一个实例方法,可用于隐藏验证提示信息。 hideHint()方法的语法 hideHint(ruleName: string); hideHint()方法的参数 参数名称…

    jquery 2023年5月12日
    00
  • jQuery.parseJSON()函数详解

    jQuery.parseJSON()函数详解 简介 jQuery.parseJSON()函数是jQuery的一个JSON解析方法,用于将JSON字符串转化为JavaScript对象。 语法 jQuery.parseJSON(jsonString) 其中,jsonString是需要解析的JSON字符串。 返回值 函数返回由 JSON 字符串构造的对象。 示例 …

    jquery 2023年5月27日
    00
  • jQuery UI Draggable refreshPositions选项

    以下是关于 jQuery UI 的 Draggable refreshPositions 选项的详细攻略: jQuery UI Draggable refreshPositions 选项 refreshPositions 选项用于指定是否在拖动期间刷新可拖动元素的位置。可以使用该选项来控制可拖动元素的位置是否在拖动期间实时更新。 语法 $(selector)…

    jquery 2023年5月11日
    00
  • 在jQuery中用on()代替live()

    在jQuery中,使用live()方法添加事件处理程序可以为动态创建和不存在的元素绑定事件。但是因为这种方法的实现方式基于事件冒泡,所以可能会导致性能问题。为了解决这个问题,jQuery推荐使用on()方法来代替live()。下面是详细的攻略。 步骤一 首先,将所有使用live()方法的代码全部替换为on()方法。 例如,原来的代码是: $("a&…

    jquery 2023年5月13日
    00
合作推广
合作推广
分享本页
返回顶部