最近公司的一个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 = express(); let server= require('http').Server(app); let io = require('socket.io')(server); io.on('connect', (socket) => { setInterval(() => { socket.emit('hi','hello') },2000) socket.on('hello', (data) => { console.log('hello',data) socket.emit('hi','get it') }) socket.on('disconnect', (data) => { console.log('断开', data) }) }) server.listen(8080);
再搭个vue-cli3环境,main.js里use一下socket:
import Vue from 'vue' import App from './App.vue' import VueSocketIO from 'vue-socket.io' Vue.config.productionTip = false Vue.use(new VueSocketIO({ debug: true, connection: 'http://127.0.0.1:8080', })) new Vue({ render: h => h(App), }).$mount('#app')
再去组件里监听一下:
<script> export default { sockets: { connect() { console.log('链接成功'); }, disconnect() { console.log('断开链接') }, reconnect() { console.log('重新链接') }, hi(res) { console.log('VueSocketIO', res) } } } </script>
结果:
为什么,是socket数据没发送过来吗?我装个socket.io-client试试:
import io from 'socket.io-client' export default { mounted() { io('http://127.0.0.1:8080').on('hi', (res) => { console.log('socket.io-client', res) }) }, }
没问题,数据传过来了,但vue-socket.io为啥不行,不管了,先向服务端发送一条信息看能不能收到:
this.$socket.emit('hello','i am wk')
没问题,收到了,所以现在是socket已经连接上了,客户端可以向服务端正常发送数据,但服务端也向客户端发送数据了,上面用socket.io-client可以正常接收已经证明这一点了,问题是vue-socket.io没有正确写法去接收数据,似乎api上的写法出bug了。
打印一下this发现因为引入vue-socket.io的原因,this上面挂了一个sockets属性:
this.sockets下有一个listener属性,看这个名字就感觉有戏,试一下:
this.sockets.listener.subscribe('hi', (data) => { console.log('++++++++++',data) })
哇哦,可以用,好吧,就先这样用吧,虽然还是不知道sockets:{}这种的写法为什么不起作用。
到此这篇关于vue-socket.io接收不到数据问题的解决方法的文章就介绍到这了,更多相关vue-socket.io接收不到数据内容请搜索小牛知识库以前的文章或继续浏览下面的相关文章希望大家以后多多支持小牛知识库!
本文向大家介绍eclipse连接不到genymotion问题的解决方案,包括了eclipse连接不到genymotion问题的解决方案的使用技巧和注意事项,需要的朋友参考一下 (1)很多朋友在使用genymotion开发安卓应用程序的时候,会遇见完全正确的安装但是在运行的时候仍然找不到,genymotion上的设备,在打开的devices上找不到如下图所示: (2)解决的方法如下: 1、关闭ecl
本文向大家介绍解决angular的post请求后SpringMVC后台接收不到参数值问题的方法,包括了解决angular的post请求后SpringMVC后台接收不到参数值问题的方法的使用技巧和注意事项,需要的朋友参考一下 这是我后台SpringMVC控制器接收isform参数的方法,只是简单的打出它的值: 前台页面发送一个post提交表单的请求 发现后台没有取到值 后边我想到的第一种方案是在控制
本文向大家介绍Django数据库连接丢失问题的解决方法,包括了Django数据库连接丢失问题的解决方法的使用技巧和注意事项,需要的朋友参考一下 问题 在Django中使用mysql偶尔会出现数据库连接丢失的情况,错误通常有如下两种 OperationalError: (2006, 'MySQL server has gone away') OperationalError: (2013, 'Los
本文向大家介绍node连接mysql数据库遇到的问题和解决方案,包括了node连接mysql数据库遇到的问题和解决方案的使用技巧和注意事项,需要的朋友参考一下 今天安装了新版的MySQL(8.0.21),用node框架连接数据库的时候报了个错: Client does not support authentication protocol requested by server; consider
本文向大家介绍解决vue attr取不到属性值的问题,包括了解决vue attr取不到属性值的问题的使用技巧和注意事项,需要的朋友参考一下 js: html: 使用 ruleList.$nextTick(function () {}) 拿到更新后的dom 以上这篇解决vue attr取不到属性值的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持呐喊教程。
本文向大家介绍Python中使用socket发送HTTP请求数据接收不完整问题解决方法,包括了Python中使用socket发送HTTP请求数据接收不完整问题解决方法的使用技巧和注意事项,需要的朋友参考一下 由于工作的需求,需要用python做一个类似网络爬虫的采集器。虽然Python的urllib模块提供更加方便简洁操作,但是涉及到一些底层的需求,如手动设定User-Agent,Referer等