SpringMvc + socket.io + vue + vue-socket.io实例
<dependency> <groupId>com.corundumstudio.socketio</groupId> <artifactId>netty-socketio</artifactId> <version>1.7.7</version> </dependency>
其他相关依赖
<dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>2.9.6</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>${slf4j.version}</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>log4j-over-slf4j</artifactId> <version>${slf4j.version}</version> </dependency>
2. 服务端类实现 (SocketIO.java)
import java.util.Map; import org.springframework.context.ApplicationListener; import org.springframework.context.event.ContextRefreshedEvent; import org.springframework.stereotype.Component; import com.corundumstudio.socketio.AckRequest; import com.corundumstudio.socketio.Configuration; import com.corundumstudio.socketio.SocketIOClient; import com.corundumstudio.socketio.SocketIOServer; import com.corundumstudio.socketio.listener.ConnectListener; import com.corundumstudio.socketio.listener.DataListener; import com.corundumstudio.socketio.listener.DisconnectListener; @Component("socketIO") public class SocketIO implements ApplicationListener<ContextRefreshedEvent> { public void onApplicationEvent(ContextRefreshedEvent arg0) { new Thread(new Runnable() { public void run() { // TODO Auto-generated method stub socketStart(); } }).start(); } private void socketStart() { System.out.println("in socketio"); // TODO Auto-generated method stub Configuration config = new Configuration(); config.setHostname("127.0.0.1"); config.setPort(9092); config.setMaxFramePayloadLength(1024 * 1024); config.setMaxHttpContentLength(1024 * 1024); SocketIOServer server = new SocketIOServer(config); server.addConnectListener(new ConnectListener() { public void onConnect(SocketIOClient client) { // TODO Auto-generated method stub String clientInfo = client.getRemoteAddress().toString(); String clientIp = clientInfo.substring(1,clientInfo.indexOf(":"));//获取ip client.sendEvent("cliented", "ip: " + clientIp); } }); server.addDisconnectListener(new DisconnectListener() { public void onDisconnect(SocketIOClient client) { String clientInfo = client.getRemoteAddress().toString(); String clientIp = clientInfo.substring(1,clientInfo.indexOf(":"));//获取ip client.sendEvent("disconned", "ip: " + clientIp); } }); server.addEventListener("msginfo", String.class, new DataListener<String>() { public void onData(SocketIOClient client, String data, AckRequest arg2) throws Exception { // TODO Auto-generated method stub String clientInfo = client.getRemoteAddress().toString(); String clientIp = clientInfo.substring(1, clientInfo.indexOf(":")); System.out.println(clientIp+":客户端:************"+data); client.sendEvent("msginfo", "服务端返回信息!"); } }); server.start(); try { Thread.sleep(Integer.MAX_VALUE) ; } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } server.stop(); } }
将该类添加到 xml 配置文件,让它容器启动后执行;
<bean id="socketIO" class="com.spring.getinfo.utils.SocketIO"></bean>
运行 springmvc
vue端实现
1. vue 环境安装;
a. 安装node.js(https://nodejs.org/en/)
选择 Current
b. 设置相关参数: (NODE_HOME, PATH等)
c. 安装 cnpm
npm install -g cnpm --registry=https://registry.npm.taobao.org
d. 安装 vue
cnpm install vue -g
e. vue-cli 脚手架
cnpm install vue-cli -g
2. 创建 vue 项目
vue init webpack-simple vueProj
>cd vueProj 进入 vueProj项目目录
>cnpm install 生成 node_modules 等相关目录及文件
3. 引入 vue-socket.io
npm install vue-socket.io --save
使用 /src/main.js
import VueSocketio from 'vue-socket.io' Vue.use(new VueSocketio({ debug: true, connection: 'http://localhost:9092' }));
在 /src/App.vue
<div> <input type="text" name="box" ref="box" /> <input type="button" @click="clickButton('user1')" value="button" /> </div>
以及 脚本
export default { name: 'app', data () { return { msg: 'Welcome to Your Vue.js App' } }, sockets: { connect: function () { console.log('socket connected'); //this.$socket.emit('login', 'socket connectedxxxx'); }, msginfo: function (data) { //console.log('this method was fired by the socket server. eg: io.emit("customEmit", data)'); console.log("client: " + data); }, }, methods: { clickButton: function () { var msg = this.$refs.box.value; console.log(msg); this.$socket.emit('msginfo', msg); } } }
使用 vue 运行端口 (项目目录 vueProj/package.json,添加红色部分)
"scripts": { "dev": "cross-env NODE_ENV=development webpack-dev-server --open --hot --port 9192", "build": "cross-env NODE_ENV=production webpack --progress --hide-modules" },
然后运行vue项目,在vueProj目录下(cmd窗口),执行 cnpm run dev;
scripts 下 connect是内置事件 (侦听连接服务端成功);msginfo为自定义事件,与 this.$socket.emit('msginfo', xxxxx) 对应;
截图:
窗口1:
窗口2:
服务端截图:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!