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


Posted in Javascript onSeptember 05, 2019

在很多需求业务中,都需要浏览器和服务器实时通信来实现功能,比如:扫码登录(扫码后,手机确认登录,PC网页完成登录并跳转)、订单语言提醒等,这些都是建立在两端实时通信的基础上的。对前端而言,来实现浏览器和服务器实时通信,最好的选择就是Socket.IO库,能够快速的实现两端实时通信功能。

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

1、什么是 Socket.IO?

Socket.IO 是一个WebSocket库,可以在浏览器和服务器之间实现实时,双向和基于事件的通信。它包括:Node.js服务器库、浏览器的Javascript客户端库。它会自动根据浏览器从WebSocket、AJAX长轮询、Iframe流等等各种方式中选择最佳的方式来实现网络实时应用,非常方便和人性化,而且支持的浏览器最低达IE5.5

2、Socket.IO 主要特点

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

(1)、支持浏览器/Nodejs环境 (2)、支持双向通信 (3)、API简单易用 (4)、支持二进制传输 (5)、减少传输数据量

3、Vue.js 中 Socket.IO的使用

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

(1)客户端

npm install vue-socket.io --save

main.js添加下列代码

import VueSocketIO from 'vue-socket.io'
 
Vue.use(new VueSocketIO({
 debug: true,
 // 服务器端地址
 connection: 'http://localhost:3000',
 vuex: {
 }
}))

发送消息和监听消息

//发送信息给服务端
this.$socket.emit('login',{
 username: 'username',
 password: 'password'
});

//接收服务端的信息
this.sockets.subscribe('relogin', (data) => {
 console.log(data)
})

(2)服务端

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

服务端,我们基于express搭建node服务器。

npm install --save express
npm install --save socket.io

index.js文件

var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);

app.get('/', function(req, res){
 res.send('<h1>你好web秀</h1>');
});
 
io.on('connection',function(socket) {
 //接收数据
 socket.on('login', function (obj) {    
  console.log(obj.username);
  // 发送数据
  socket.emit('relogin', {
  msg: `你好${obj.username}`,
  code: 200
  }); 
 });
});
 
http.listen(3000, function(){
 console.log('listening on *:3000');
});

然后启动服务端服务

node index.js

客户端即可查看效果。

4、Socket.IO有哪些事件

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

io.on('connect', onConnect);

function onConnect(socket){

 // 发送给当前客户端
 socket.emit(
 'hello', 
 'can you hear me?', 
 1, 
 2, 
 'abc'
 );

 // 发送给所有客户端,除了发送者
 socket.broadcast.emit(
 'broadcast', 
 'hello friends!'
 );

 // 发送给同在 'game' 房间的所有客户端,除了发送者
 socket.to('game').emit(
 'nice game', 
 "let's play a game"
 );

 // 发送给同在 'game1' 或 'game2' 房间的所有客户端,除了发送者
 socket.to('game1').to('game2').emit(
 'nice game', 
 "let's play a game (too)"
 );

 // 发送给同在 'game' 房间的所有客户端,包括发送者
 io.in('game').emit(
 'big-announcement', 
 'the game will start soon'
 );

 // 发送给同在 'myNamespace' 命名空间下的所有客户端,包括发送者
 io.of('myNamespace').emit(
 'bigger-announcement', 
 'the tournament will start soon'
 );

 // 发送给指定 socketid 的客户端(私密消息)
 socket.to(<socketid>).emit(
 'hey', 
 'I just met you'
 );

 // 包含回执的消息
 socket.emit(
 'question', 
 'do you think so?', 
 function (answer) {}
 );

 // 不压缩,直接发送
 socket.compress(false).emit(
 'uncompressed', 
 "that's rough"
 );

 // 如果客户端还不能接收消息,那么消息可能丢失
 socket.volatile.emit(
 'maybe', 
 'do you really need it?'
 );

 // 发送给当前 node 实例下的所有客户端(在使用多个 node 实例的情况下)
 io.local.emit(
 'hi', 
 'my lovely babies'
 );
};

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript中获取选中对象的类型
Apr 02 Javascript
js 判断 enter 事件
Feb 12 Javascript
Javascript 实现复制(Copy)动作方法大全
Jun 20 Javascript
javascript数组去重的六种方法汇总
Aug 16 Javascript
js实现商城星星评分的效果
Dec 29 Javascript
Node.js中npm常用命令大全
Jun 09 Javascript
Vue开发中整合axios的文件整理
Apr 29 Javascript
详解vue.js数据传递以及数据分发slot
Jan 20 Javascript
基于VUE实现的九宫格抽奖功能
Sep 30 Javascript
js验证身份证号码记录的方法
Apr 26 Javascript
js实现整体缩放页面适配移动端
Mar 31 Javascript
Vue 实现可视化拖拽页面编辑器
Feb 01 Vue.js
vue路由守卫及路由守卫无限循环问题详析
Sep 05 #Javascript
关于JS解构的5种有趣用法
Sep 05 #Javascript
vue draggable resizable gorkys与v-chart使用与总结
Sep 05 #Javascript
JavaScript获取某一天所在的星期
Sep 05 #Javascript
layui table设置某一行的字体颜色方法
Sep 05 #Javascript
微信小程序HTTP接口请求封装代码实例
Sep 05 #Javascript
layui table去掉右侧滑动条的实现方法
Sep 05 #Javascript
You might like
虹吸式咖啡探讨–研磨
2021/03/03 冲泡冲煮
PHP中的cookie不用刷新就生效的方法
2012/02/04 PHP
PHP无限分类(树形类)
2013/09/28 PHP
微信红包随机生成算法php版
2016/07/21 PHP
TP(thinkPHP)框架多层控制器和多级控制器的使用示例
2018/06/13 PHP
PHP设计模式之观察者模式定义与用法示例
2018/08/04 PHP
JQuery中对服务器控件 DropdownList, RadioButtonList, CheckboxList的操作总结
2011/06/28 Javascript
jquery根据name属性查找的小例子
2013/11/21 Javascript
xmlhttp缓存清除的2种解决方法
2013/12/13 Javascript
js实现获取焦点后光标在字符串后
2014/09/17 Javascript
小白谈谈对JS原型链的理解
2016/05/03 Javascript
artDialog+plupload实现多文件上传
2016/07/19 Javascript
BootStrap框架个人总结(bootstrap框架、导航条、下拉菜单、轮播广告carousel、栅格系统布局、标签页tabs、模态框、菜单定位)
2016/12/01 Javascript
JavaScript的事件机制详解
2017/01/17 Javascript
常用的js方法合集
2017/03/10 Javascript
JavaScript实现反转字符串的方法详解
2017/04/27 Javascript
vue实现提示保存后退出的方法
2018/03/15 Javascript
详解vue中点击空白处隐藏div的实现(用指令实现)
2018/04/19 Javascript
ES6与CommonJS中的模块处理的区别
2018/06/13 Javascript
详解基于vue-cli3.0如何构建功能完善的前端架子
2018/10/09 Javascript
基于javascript处理二进制图片流过程详解
2020/06/08 Javascript
Vue 401配合Vuex防止多次弹框的案例
2020/11/11 Javascript
Python urlopen()函数 示例分享
2014/06/12 Python
Python向日志输出中添加上下文信息
2017/05/24 Python
pandas对dataFrame中某一个列的数据进行处理的方法
2019/07/08 Python
线程安全及Python中的GIL原理分析
2019/10/29 Python
Python list与NumPy array 区分详解
2019/11/06 Python
使用CSS3代码绘制可爱的Hello Kitty猫
2016/08/03 HTML / CSS
美国知名玩具品牌:Melissa & Doug
2016/08/16 全球购物
中文系学生自荐信范文
2013/11/13 职场文书
大学生求职自荐信范文
2015/03/04 职场文书
幼儿园安全教育月活动总结
2015/05/08 职场文书
优秀班主任工作总结2015
2015/05/25 职场文书
2016年母亲节寄语
2015/12/04 职场文书
Python图片验证码降噪和8邻域降噪
2021/08/30 Python
详解NumPy中的线性关系与数据修剪压缩
2022/05/25 Python