最近公司的一个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:{}这种的写法为什么不起作用。
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。