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:

服务端截图:

SpringMvc + socket.io + vue + vue-socket.io实例的更多相关文章
- vue.js+socket.io+express+mongodb打造在线聊天
vue.js+socket.io+express+mongodb打造在线聊天 在线地址观看 http://www.chenleiming.com github地址 https://github.com ...
- vue.js+socket.io+express+mongodb打造在线聊天[二]
vue.js+socket.io+express+mongodb打造在线聊天[二] 在线地址观看 http://www.chenleiming.com github地址 https://github. ...
- socket.io 中文手册 socket.io 中文文档
socket.io 中文手册,socket.io 中文文档转载于:http://www.cnblogs.com/xiezhengcai/p/3956401.html 服务端 io.on('connec ...
- JAVA IO总结及socket简单实现
为了方便理解与阐述,先引入两张图: a.Java IO中常用的类 在整个Java.io包中最重要的就是5个类和一个接口.5个类指的是File.OutputStream.InputStream.Writ ...
- socket编程报异常java.io.EOFException
一个客户端连接服务器的小程序,服务器端可以正常读取客户端发来的数据 但是当客户端关闭时,服务端也关闭了,并且抛出如下的异常: java.io.EOFException at java.io.DataI ...
- Linux Network IO Model、Socket IO Model - select、poll、epoll
目录 . 引言 . IO机制简介 . 阻塞式IO模型(blocking IO model) . 非阻塞式IO模型(noblocking IO model) . IO复用式IO模型(IO multipl ...
- oracle数据库登录连接很慢;kettle连接oracle 报 IO 错误,socket time out 问题解决记录
问题描述: 1:oracle数据库连接登陆时突然变得很慢:sqldeveloper链接数据库很慢: 2:Kettle-spoon etl程序访问数据库,任务执行时报 :数据库连接 IO错误 :Sock ...
- IO多路复用丶基于IO多路复用+socket实现并发请求丶协程
一丶IO多路复用 IO多路复用指:通过一种机制,可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作 IO多路复用作用: 检测多个socket是否已经发生变 ...
- (转)Linux Network IO Model、Socket IO Model - select、poll、epoll
Linux Network IO Model.Socket IO Model - select.poll.epoll 原文:https://www.cnblogs.com/LittleHann/p/ ...
- socket互传对象以及IO流的顺序问题
UserInfo.java package com.company.s6; import java.io.Serializable; public class UserInfo implements ...
随机推荐
- Windows操作系统发展历程
1964年贝尔实验室(Bell).麻省理工学院(MIT)及美国通用电气公司(GE)为了开发出一套安装在大型主机上多人多工的操作系统开发了Multics系统.Multics是一个全面的,通用编程系统.后 ...
- 五、Pyqt5事件、信号和槽
PyQt中提供了两种针对事件处理的机制:一种是事件,另一种则是信号和槽. 一.事件 事件处理在PyQt中是比较底层的,常用的事件有键盘事件.鼠标事件.拖放事件.滚轮事件.定时事件.焦点事件.进入和离开 ...
- 老赵点滴地址:http://blog.zhaojie.me/2009/05/a-simple-actor-model-implementation.html
老赵点滴地址:http://blog.zhaojie.me/2009/05/a-simple-actor-model-implementation.html
- ili 一例业务系统框架
ili即ilinei的简称,像名字一样,是ILINEI团队的内部项目简化而来.2017年金鸡报晓,我们为同行送来了一个简单.快速.轻量级的PHP开源系统,它的任务当然也是唯一的任务,就是提高WEB开发 ...
- javascript之原型链
JavaScript 中,万物皆对象!(对于编程而言,可以说万物皆对象.) js中的原型链的作用时什么呢? 我自己的理解是,给一个人赋予一些技能, function people(name,age,s ...
- 2019.03.28 bzoj3597: [Scoi2014]方伯伯运椰子(01分数规划)
传送门 题意咕咕咕有点麻烦不想写 思路: 考虑加了多少一定要压缩多少,这样可以改造边. 于是可以通过分数规划+spfaspfaspfa解决. 代码: #include<bits/stdc++.h ...
- python pandas.DataFrame.append
1.使用append首先要注意的是,你要合并两个DataFrame的columns即列名是否是相同的,不相同的就会报错. 2.我们会发现DataFrame的列名是不能够重复的,而行名(index)是可 ...
- Unity3D编辑器扩展(三)——使用GUI绘制窗口
前两篇分别讲解了创建菜单https://www.cnblogs.com/xiaoyulong/p/10115053.html和创建窗口https://www.cnblogs.com/xiaoyulon ...
- Day08 (黑客成长日记) 命名空间和作用域
Day08:命名空间和作用域: 1.命名空间: (1)内置命名空间(python解释器): 就是python解释器一旦启动就可以使用的名字储存在内置命名空间中: eg: len() print() a ...
- 关于Apahce服务器安装中遇到的问题
在这篇中,将记录一下安装Apache服务器所遇到的一些问题,并简单讲一些Apache和Tomcat的区别: 1>apache安装中遇到的问题: 1.1 Apache目前不再提供编译好的exe安装 ...