Springboot+Vue实现多人聊天室
最近在学习Springboot后端框架,实习的时候有用过Vue.js框架来写过一些前端页面,今天尝试着利用SpringBoot和Vue.js来实现聊天室功能,加深一下理解。
先展示一下做好的效果:

SpringBoot后端代码:
1、新建一个SpringBoot工程
2、首先要注入ServerEndpointExporter,这个bean会自动注册使用了@ServerEndpoint注解声明的Websocket endpoint。要注意,如果使用独立的servlet容器,而不是直接使用springboot的内置容器,就不要注入ServerEndpointExporter,因为它将由容器自己提供和管理。这里使用Java注解配置方式,自动配置,配置类代码如下:
1 package com.example.demospring.config; 2 3 import org.springframework.context.annotation.Bean; 4 import org.springframework.context.annotation.Configuration; 5 import org.springframework.web.socket.server.standard.ServerEndpointExporter; 6 7 @Configuration 8 public class WebScoketConfig { 9 @Bean 10 public ServerEndpointExporter serverEndpointExporter() { 11 return new ServerEndpointExporter(); 12 } 13 }
3、新建一个websocket的具体实现类,代码如下:
1 package com.example.demospring.controller.WebScoketController; 2 3 import org.springframework.beans.factory.annotation.Autowired; 4 import org.springframework.context.annotation.ComponentScan; 5 import org.springframework.context.annotation.Configuration; 6 import org.springframework.web.bind.annotation.RestController; 7 import org.springframework.web.socket.server.standard.ServerEndpointExporter; 8 9 import javax.websocket.*; 10 import javax.websocket.server.PathParam; 11 import javax.websocket.server.ServerEndpoint; 12 import java.io.IOException; 13 import java.util.ArrayList; 14 import java.util.List; 15 @RestController 16 @ServerEndpoint(value="/Room/{username}") // 当创建好一个(服务)端点之后,将它以一个指定的URI发布到应用当中,这样远程客户端就能连接上它了 17 public class WsBytomcate { 18 private static List<Session> sessions = new ArrayList<Session>(); 19 @OnOpen 20 public void OnOpen(Session session, @PathParam(value = "username") String username) { 21 sessions.add(session); 22 sendTextMsg("好友 [" + username + "]加入群聊"); 23 } 24 @OnMessage 25 public void OnMsg(String msg,@PathParam(value = "username") String username) { 26 sendTextMsg(username + ":" +msg); 27 } 28 @OnClose 29 public void OnClose(Session session, @PathParam("username") String username) throws IOException { 30 sessions.remove(session); 31 sendTextMsg("好友 ["+ username + "] 退出群聊"); 32 } 33 @OnError 34 public void OnError(Throwable e) { 35 e.printStackTrace(); 36 } 37 private void sendTextMsg(String msg) { 38 for (Session session : sessions) { 39 session.getAsyncRemote().sendText(msg); 40 } 41 } 42 }
Vue.js前端代码:
1、新建vue-cli工程
2、前端页面代码:
<template>
<div class="roomStyle">
<br>欢迎使用<strong>VueTest</strong>极简聊天室:<br/><br/>
<textarea id="content" v-model="content" cols="60" rows="30" readonly="readonly"></textarea><br>
<input type="text" v-model="message">
<button type="button" @click="sendMsg()">发送消息</button>
<br/><br/>
用户:<input type="text" v-model="user">
<button @click="joinRoom()">加入群聊</button>
<button @click="exitRoom()">退出群聊</button>
</div>
</template>
<script>
export default {
name: 'pageRoom',
data() {
return {
url: 'ws://'+ window.location.host + '/Room/',
ws: null,
user: '',
message: '',
content: '',
}
},
created(){
},
methods: {
async joinRoom(){
if(this.ws) {
alert("你已经再聊天室");
return;
}
let url = this.url;
let username = this.user;
this.ws = new WebSocket('ws://127.0.0.1:8080/Room/' + username); // 后端的启动端口
this.ws.onopen = this.webscoketonopen;
this.ws.onmessage = this.webscoketonmessage;
//发生错误触发
this.ws.onerror = function () {
console.log("连接错误")
};
//正常关闭触发
this.ws.onclose = function () {
console.log("连接关闭");
};
},
webscoketonopen(){
console.log("与服务器成功建立连接");
},
webscoketonmessage(value){
console.log(value);
this.content += (value.data + '\r\n') ;
},
exitRoom(){
this.closeWebSocket();
},
sendMsg(){
if(!this.ws) {
alert('你已经掉线,请重新加入');
return;
}
if(this.ws.readyState === 1){
this.ws.send(this.message);
this.message = '';
} else {
alert('发送失败');
}
},
closeWebSocket(){
if(this.ws) {
this.ws.close();
this.ws = null;
}
},
talking(content) {
console.log(content);
}
}
}
</script>
<style>
.roomStyle{
text-align: center;
background-color: rgba(15, 161, 230, 0.35);
margin: 0 auto;
border: 1px solid #000;
width: 600px;
height: 650px
}
</style>
前端源码下载: https://github.com/xxyxt/vueDemo.git
后端源码下载:https://github.com/xxyxt/springdemo.git
参考:https://www.cnblogs.com/chenbenbuyi/p/10779999.html

浙公网安备 33010602011771号