关于vue-socket.io使用及版本原因消息无法监听bug

目录
  • 前言
  • 一、vue-socket.io使用
    • 1.npm下载
    • 2.在src文件夹里面新建lib文件夹
    • 3.在main.js引入
    • 4.在组件中的用法
  • 二、版本导致消息无法监听问题
    • 在3.0.8和3.0.9下这样写无效
    • 3.0.8和3.0.9要像下面一样写 利用listener来监听
  • 总结

前言

主要记录vue-socket.io使用,以及使用版本不同导致消息无法监听问题。

一、vue-socket.io使用

1.npm下载

npm install vue-socket.io --save-dev

2.在src文件夹里面新建lib文件夹

在lib文件夹里面新建socket.js

代码如下(示例):

import Vue from 'vue'
import VueSocketIO from 'vue-socket.io'
import { getToken } from "../../libs/util";
let testA;
let wesocket = {
  debug: true,
  connection: ''
}
function getSocket (t) {
  console.log('地址',process.env.VUE_APP_SOCKET)
  var socketIp = process.env.VUE_APP_SOCKET// socket地址\
  wesocket.connection = socketIp
  if (getToken() || t) { // 判断是否有token  tokenId  sessid
    let tk = getToken() ? getToken() : t
    wesocket.connection = socketIp + '?sessid=' + tk
  }
  wesocket.debug = true // 是否开启控制台监听打印数据
  if (wesocket.connection != '') {
    Vue.use(new VueSocketIO(wesocket))
  }
}
getSocket();
//挂在在全局prototype上
Vue.prototype.$getSocket = getSocket

export default testA

3.在main.js引入

代码如下(示例):

import VueSocketIO from './lib/socket'  
new Vue({  
    el: '#app',  
    VueSocketIO,  
    components: {  
    App  
},  
template: '<App/>'  10.    })

4.在组件中的用法

代码如下(示例):

//跟methods同级 
sockets: {
   connect: function () {
       console.log('connect====连接');
  },
   // 监听断开连接,函数
   disconnect() {
       console.log('disconnect====监听断开连接')
   },
   reconnect () {
       console.log('reconnect====再连接')
   },
   msginfo: function (data) {
       let jsonObj = JSON.parse(data) ;
       console.log('jsonObj++++++++++',jsonObj)
   },
   msginfoTip: function (data) { // socket获取冒泡信息
       let data1 = JSON.parse(data);
       let _this = this
       // console.log('data1获取冒泡信息',data1)
   }
}

注意: vue-socket.io3.07版本及以下版本可以这样使用,能连接并且有数据返回,但是vue-socket.io3.08,3.09有bug连接了但是接收不到数据。

二、版本导致消息无法监听问题

vue-socket.io3.07版本及以下版本可以这样使用,能连接并且有数据返回,但是vue-socket.io3.08,3.09有bug连接了但是接收不到数据。

在3.0.8和3.0.9下这样写无效

3.0.8和3.0.9要像下面一样写 利用listener来监听

代码如下(示例):

this.sockets.listener.subscribe('connect', (data) => {
  console.log('connect连接成功')
})

this.sockets.listener.subscribe('msginfo', (data) => {
  console.log('数据监听msginfo',data)
})

this.sockets.listener.subscribe('msginfoTip', (data) => {
  console.log('数据监听msginfoTip',data)
})

总结

vue-socket.io使用版本不同,监听数据方式不同。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • vue-socket.io接收不到数据问题的解决方法

    最近公司的一个vue项目用到了vue-socket.io来处理socket数据传输,之前用过socket.io-client,现在知道vue-socket.io是基于socket.io-client的一层封装,将socket挂于全局从而更方便的书写. 于是把代码拉取下来运行: 什么鬼,同样的代码为什么我的就接收不到数据,自己新建一个测试一下吧! 先用express和socket.io搭个小socket服务器: let express = require('express'); let app =

  • vue使用 vue-socket.io三种方式及踩坑实例解析

    目录 前言 安装 使用方式一 (官方用法)[全局挂载,不验证] 使用方式二 (组件挂载使用)[可验证] 使用方式三 (全局挂载使用)[可验证] 使用方式推荐 nodejs服务端本地demo代码 总结 前言 vue项目实时通信实现常用方式: 一.原生HTML5 WebSocket实现,vue中使用websocket 二.插件socket.io官网 ,Socket.io是一个WebSocket库,包括了客户端js和服务器端的nodejs,会自动根据浏览器从WebSocket.AJAX长轮询.Ifra

  • vue-socket.io跨域问题有效解决方法

    网友问题: 使用了vue-cli这个脚手架工具.在开发环境中如何配置跨域这个我懂.但是使用npm run build后,里面所有的ajax的跨域请求url都变成了根目录. 这样该如何解决部署的跨域问题? 报错信息: Access to XMLHttpRequest at 'http://192.168.37.130:5050/socket.io/?EIO=3&transport=polling&t=N0oqNsW' from origin 'http://localhost:8080' h

  • Vue.js如何使用Socket.IO的示例代码

    在很多需求业务中,都需要浏览器和服务器实时通信来实现功能,比如:扫码登录(扫码后,手机确认登录,PC网页完成登录并跳转).订单语言提醒等,这些都是建立在两端实时通信的基础上的.对前端而言,来实现浏览器和服务器实时通信,最好的选择就是Socket.IO库,能够快速的实现两端实时通信功能. 1.什么是 Socket.IO? Socket.IO 是一个WebSocket库,可以在浏览器和服务器之间实现实时,双向和基于事件的通信.它包括:Node.js服务器库.浏览器的Javascript客户端库.它会

  • Vue Socket.io源码解读

    背景 有一个项目,今年12月份开始重构,项目涉及到了socket.但是socket用的是以前一个开发人员封装的包(这个一直被当前的成员吐槽为什么不用已经千锤百炼的轮子).因此,趁着这个重构的机会,将vue-socket.io引入,后端就用socket.io.我也好奇看了看vue-socket.io的源码(我不会说是因为这个库的文档实在太简略了,我为了稳点去看源码了解该怎么用) 开始 文件架构 我们主要看src下的三个文件,可以看出该库是用了观察者模式 Main.js // 这里创建一个obser

  • vue+socket.io+express+mongodb 实现简易多房间在线群聊示例

    项目简介 主要是通过做一个多人在线多房间群聊的小项目.来练手全栈技术的结合运用. 项目源码:chat-vue-node 主要技术: vue2全家桶 + socket.io + node(express) + mongodb(mongoose) 环境配置: 需安装配置好 node,mongodb环境(参考:http://www.jb51.net/article/109449.htm); 建议安装 Robomogo 客户端来管理mongodb数据. 编译运行: 1.开启MongoDB服务,新建命令行

  • vue源码学习之Object.defineProperty对象属性监听

    本文介绍了vue源码学习之Object.defineProperty对象属性监听,分享给大家,具体如下: 参考版本 vue源码版本:0.11 相关 vue实现双向数据绑定的关键是 Object.defineProperty ,让我们先来看下这个函数. 在MDN上查看有关Object.defineProperty的解释. 我们先从最简单的开始: let a = {'b': 1}; Object.defineProperty(a, 'b', { enumerable: false, configur

  • Vue百度地图实现定位和marker拖拽监听功能

    目录 一.完成地图步骤 1.在index.html引入百度地图 2.创建地图容器,容器一定要设置宽高 3.创建地图实例 二.百度地图踩过的一些坑 1.'BMap' is not defined报错 2.标注没有出现在地图中间而是左上角 3.定位不准确 效果图:拖拽前和拖拽后 一.完成地图步骤 百度地图文档地址:地图 JS API | 百度地图API SDK 1.在index.html引入百度地图 <script type="text/javascript" src="h

  • vue + socket.io实现一个简易聊天室示例代码

    vue + vuex + elementUi + socket.io实现一个简易的在线聊天室,提高自己在对vue系列在项目中应用的深度.因为学会一个库或者框架容易,但要结合项目使用一个库或框架就不是那么容易了.功能虽然不多,但还是有收获.设计和实现思路较为拙劣,恳请各位道友指正. 可以达到的需求 能查看在线用户列表 能发送和接受消息 使用到的框架和库 socket.io做为实时通讯基础 vuex/vue:客户端Ui层使用 Element-ui:客户端Ui组件 类文件关系图 服务端: 客户端: 服

  • Vue使用路由钩子拦截器beforeEach和afterEach监听路由

    在路由跳转的时候,我们需要一些权限判断或者其他操作.这个时候就需要使用路由的钩子函数. 定义:路由钩子主要是给使用者在路由发生变化时进行一些特殊的处理而定义的函数. 总体来讲vue里面提供了三大类钩子,两种函数 1.全局钩子 2.某个路由的钩子 3.组件内钩子 两种函数: 1. router.beforeEach(function(to,form,next){}) /*在跳转之前执行*/ 2. router.afterEach(function(to,form)}{}) /*在跳转之后判断*/

  • vue源码学习之Object.defineProperty 对数组监听

    上一篇中,我们介绍了一下defineProperty 对对象的监听,这一篇我们看下defineProperty 对数组的监听 数组的变化 先让我们了解下Object.defineProperty()对数组变化的跟踪情况: var a={}; bValue=1; Object.defineProperty(a,"b",{ set:function(value){ bValue=value; console.log("setted"); }, get:function(

  • vue+node+socket io实现多人互动并发布上线全流程

    一.背景 1. 前端使用vue + vuex + socket.io-client npm install socket.io-client --save-dev 2. 后端使用node + express + socketio 1.搭建node开发环境 npm init -y 安装所需依赖 npm install express --save-dev npm install socket.io-client --save-dev 二. socket.io相关用法概览 1. 发送事件 socke

  • Node.js websocket使用socket.io库实现实时聊天室

    认识websocket WebSocket protocol 是HTML5一种新的协议.它实现了浏览器与服务器全双工通信(full-duple).一开始的握手需要借助HTTP请求完成. 其实websocket 并不是很依赖Http协议,它也拥有自己的一套协议机制,但在这里我们需要利用的socket.io 需要依赖到http . 之前用java jsp写过一个聊天,其实实现逻辑并不难,只是大部分时间都用在UI的设计上,其实现原理就是一个基于websocket的通信,要想做一个好的聊天室,我觉得大部

随机推荐