SpringMvc部分实现
 1. 所需依赖
  1. <dependency>
  2.           <groupId>com.corundumstudio.socketio</groupId>
  3.           <artifactId>netty-socketio</artifactId>
  4.           <version>1.7.7</version>
  5. </dependency>

其他相关依赖

  1. <dependency>
  2. <groupId>com.fasterxml.jackson.core</groupId>
  3. <artifactId>jackson-core</artifactId>
  4. <version>2.9.6</version>
  5. </dependency>
  6.  
  7. <dependency>
  8. <groupId>org.slf4j</groupId>
  9. <artifactId>slf4j-api</artifactId>
  10. <version>${slf4j.version}</version>
  11. </dependency>
  12. <dependency>
  13. <groupId>org.slf4j</groupId>
  14. <artifactId>log4j-over-slf4j</artifactId>
  15. <version>${slf4j.version}</version>
  16. </dependency>

2. 服务端类实现 (SocketIO.java)

  1. import java.util.Map;
  2.  
  3. import org.springframework.context.ApplicationListener;
  4. import org.springframework.context.event.ContextRefreshedEvent;
  5. import org.springframework.stereotype.Component;
  6.  
  7. import com.corundumstudio.socketio.AckRequest;
  8. import com.corundumstudio.socketio.Configuration;
  9. import com.corundumstudio.socketio.SocketIOClient;
  10. import com.corundumstudio.socketio.SocketIOServer;
  11. import com.corundumstudio.socketio.listener.ConnectListener;
  12. import com.corundumstudio.socketio.listener.DataListener;
  13. import com.corundumstudio.socketio.listener.DisconnectListener;
  14.  
  15. @Component("socketIO")
  16. public class SocketIO implements ApplicationListener<ContextRefreshedEvent> {
  17.  
  18. public void onApplicationEvent(ContextRefreshedEvent arg0) {
  19.  
  20. new Thread(new Runnable() {
  21.  
  22. public void run() {
  23. // TODO Auto-generated method stub
  24. socketStart();
  25. }
  26. }).start();
  27. }
  28.  
  29. private void socketStart() {
  30. System.out.println("in socketio");
  31.  
  32. // TODO Auto-generated method stub
  33. Configuration config = new Configuration();
  34. config.setHostname("127.0.0.1");
  35.  
  36. config.setPort(9092);
  37. config.setMaxFramePayloadLength(1024 * 1024);
  38. config.setMaxHttpContentLength(1024 * 1024);
  39. SocketIOServer server = new SocketIOServer(config);
  40.  
  41. server.addConnectListener(new ConnectListener() {
  42.  
  43. public void onConnect(SocketIOClient client) {
  44. // TODO Auto-generated method stub
  45. String clientInfo = client.getRemoteAddress().toString();
  46. String clientIp = clientInfo.substring(1,clientInfo.indexOf(":"));//获取ip
  47.  
  48. client.sendEvent("cliented", "ip: " + clientIp);
  49. }
  50. });
  51.  
  52. server.addDisconnectListener(new DisconnectListener() {
  53.  
  54. public void onDisconnect(SocketIOClient client) {
  55. String clientInfo = client.getRemoteAddress().toString();
  56. String clientIp = clientInfo.substring(1,clientInfo.indexOf(":"));//获取ip
  57.  
  58. client.sendEvent("disconned", "ip: " + clientIp);
  59.  
  60. }
  61. });
  62.  
  63. server.addEventListener("msginfo", String.class, new DataListener<String>() {
  64.  
  65. public void onData(SocketIOClient client, String data, AckRequest arg2) throws Exception {
  66. // TODO Auto-generated method stub
  67. String clientInfo = client.getRemoteAddress().toString();
  68. String clientIp = clientInfo.substring(1, clientInfo.indexOf(":"));
  69. System.out.println(clientIp+":客户端:************"+data);
  70.  
  71. client.sendEvent("msginfo", "服务端返回信息!");
  72. }
  73. });
  74.  
  75. server.start();
  76. try {
  77. Thread.sleep(Integer.MAX_VALUE) ;
  78. } catch (InterruptedException e) {
  79. // TODO Auto-generated catch block
  80. e.printStackTrace();
  81. }
  82. server.stop();
  83. }
  84. }

将该类添加到 xml 配置文件,让它容器启动后执行;

  1. <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

  1. import VueSocketio from 'vue-socket.io'
  2.  
  3. Vue.use(new VueSocketio({
  4. debug: true,
  5. connection: 'http://localhost:9092'
  6. }));

在 /src/App.vue

  1. <div>
  2. <input type="text" name="box" ref="box" />
  3. <input type="button" @click="clickButton('user1')" value="button" />
  4. </div>

以及 脚本

  1. export default {
  2. name: 'app',
  3. data () {
  4. return {
  5. msg: 'Welcome to Your Vue.js App'
  6. }
  7. },
  8. sockets: {
  9. connect: function () {
  10. console.log('socket connected');
  11. //this.$socket.emit('login', 'socket connectedxxxx');
  12. },
  13. msginfo: function (data) {
  14. //console.log('this method was fired by the socket server. eg: io.emit("customEmit", data)');
  15. console.log("client: " + data);
  16. },
  17. },
  18. methods: {
  19. clickButton: function () {
  20. var msg = this.$refs.box.value;
  21. console.log(msg);
  22.  
  23. this.$socket.emit('msginfo', msg);
  24. }
  25. }
  26. }

使用 vue 运行端口 (项目目录 vueProj/package.json,添加红色部分)

  1. "scripts": {
  2. "dev": "cross-env NODE_ENV=development webpack-dev-server --open --hot --port 9192",
  3. "build": "cross-env NODE_ENV=production webpack --progress --hide-modules"
  4. },

然后运行vue项目,在vueProj目录下(cmd窗口),执行 cnpm run dev;

scripts 下 connect是内置事件 (侦听连接服务端成功);msginfo为自定义事件,与 this.$socket.emit('msginfo', xxxxx) 对应;

截图:

窗口1:

窗口2:

服务端截图:

SpringMvc + socket.io + vue + vue-socket.io实例的更多相关文章

  1. vue.js+socket.io+express+mongodb打造在线聊天

    vue.js+socket.io+express+mongodb打造在线聊天 在线地址观看 http://www.chenleiming.com github地址 https://github.com ...

  2. vue.js+socket.io+express+mongodb打造在线聊天[二]

    vue.js+socket.io+express+mongodb打造在线聊天[二] 在线地址观看 http://www.chenleiming.com github地址 https://github. ...

  3. socket.io 中文手册 socket.io 中文文档

    socket.io 中文手册,socket.io 中文文档转载于:http://www.cnblogs.com/xiezhengcai/p/3956401.html 服务端 io.on('connec ...

  4. JAVA IO总结及socket简单实现

    为了方便理解与阐述,先引入两张图: a.Java IO中常用的类 在整个Java.io包中最重要的就是5个类和一个接口.5个类指的是File.OutputStream.InputStream.Writ ...

  5. socket编程报异常java.io.EOFException

    一个客户端连接服务器的小程序,服务器端可以正常读取客户端发来的数据 但是当客户端关闭时,服务端也关闭了,并且抛出如下的异常: java.io.EOFException at java.io.DataI ...

  6. Linux Network IO Model、Socket IO Model - select、poll、epoll

    目录 . 引言 . IO机制简介 . 阻塞式IO模型(blocking IO model) . 非阻塞式IO模型(noblocking IO model) . IO复用式IO模型(IO multipl ...

  7. oracle数据库登录连接很慢;kettle连接oracle 报 IO 错误,socket time out 问题解决记录

    问题描述: 1:oracle数据库连接登陆时突然变得很慢:sqldeveloper链接数据库很慢: 2:Kettle-spoon etl程序访问数据库,任务执行时报 :数据库连接 IO错误 :Sock ...

  8. IO多路复用丶基于IO多路复用+socket实现并发请求丶协程

    一丶IO多路复用 IO多路复用指:通过一种机制,可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作 IO多路复用作用: 检测多个socket是否已经发生变 ...

  9. (转)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/ ...

  10. socket互传对象以及IO流的顺序问题

    UserInfo.java package com.company.s6; import java.io.Serializable; public class UserInfo implements ...

随机推荐

  1. jmeter用Windows电脑分布式部署

    当然,java环境.jmeter安装我这里就不说了. 使用1个controller(imac电脑),2个agent(Windows7 系统) 一.agent配置(Windows7系统) 1.电脑环境变 ...

  2. django添加控件

    function bindRemoveCls() { $('#removeCls').click(function () { var options = $('#sel')[0].selectedOp ...

  3. python requests与aiohttp 速度对比

    环境:centos7 python3.6 测试网址:www.bai.com 测试方式:抓取百度100次 结果: aio: 10.702147483825684srequests: 12.4046785 ...

  4. 【转】【完全开源】微信客户端.NET版

    [转][完全开源]微信客户端.NET版 目录 说明 功能 原理步骤 一些参考 说明 前两天比较闲,研究了一下web版微信.因为之前看过一篇博客讲微信web协议的,后来尝试分析了一下,半途中发现其实没什 ...

  5. CCS中CMD文件解析

    http://blog.csdn.net/u011392772/article/details/49760897 gel文件中主要包含了PLL.DDR等的初始化工作,具体可以看一下gel源码就明白了: ...

  6. poi实现Excel文件的读取

    1.前端代码 $("#upload").on('click', function() { var formData = new FormData(); var name = $(& ...

  7. svn的基本使用方法

    一,svn的介绍 Subversion(SVN) 是一个开源的版本控制系統, 也就是说 Subversion 管理着随时间改变的数据. 这些数据放置在一个中央资料档案库(repository) 中. ...

  8. SpringBoot_定制banner

    SpringBoot项目在启动时会打印一个banner 这个banner 是可以定制的, 在resources 目录下创建一个banner.txt 文件,在这个文件中写入的文本将在项目启动时打印出来. ...

  9. JavaWeb三大组件之Filter

    对请求或者响应进行拦截,并做额外的逻辑处理 filter能在一个请求访问目标资源之前对其进行拦截然后做某些逻辑处理,例如权限检查,也可以在一个输出响应到达客户端之前对其进行拦截并做一些额外的操作(例如 ...

  10. Notes : <Hands-on ML with Sklearn & TF> Chapter 5

    .caret, .dropup > .btn > .caret { border-top-color: #000 !important; } .label { border: 1px so ...