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同时提交多个Web表单的方法
Dec 26 Javascript
jquery随机展示头像代码
Dec 21 Javascript
JavaScript生成GUID的多种算法小结
Aug 18 Javascript
JS模仿编辑器实时改变文本框宽度和高度大小的方法
Aug 17 Javascript
JS深度拷贝Object Array实例分析
Mar 31 Javascript
浅析js绑定事件的常用方法
May 15 Javascript
jquery 多个radio的click事件实例
Dec 03 Javascript
node.js实现复制文本到剪切板的功能
Jan 23 Javascript
node.js基础知识小结
Feb 26 Javascript
vue和webpack安装命令详解
Jun 15 Javascript
JS的函数调用栈stack size的计算方法
Jun 24 Javascript
JS实现利用闭包判断Dom元素和滚动条的方向示例
Aug 26 Javascript
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
一个MYSQL操作类
2006/11/16 PHP
php判断表是否存在的方法
2015/06/18 PHP
学习php设计模式 php实现享元模式(flyweight)
2015/12/07 PHP
PHP自动生成缩略图函数的源码示例
2019/03/18 PHP
PHP pthreads v3使用中的一些坑和注意点分析
2020/02/21 PHP
基于thinkphp5框架实现微信小程序支付 退款 订单查询 退款查询操作
2020/08/17 PHP
PHP7新特性
2021/03/09 PHP
JQuery困惑—包装集 DOM节点
2009/10/16 Javascript
基于jquery实现的上传图片及图片大小验证、图片预览效果代码
2011/04/12 Javascript
jquery使用remove()方法删除指定class子元素
2015/03/26 Javascript
javascript如何写热点图
2015/12/08 Javascript
Bootstrap布局方式详解
2016/05/27 Javascript
Bootstrap免费字体和图标网站(值得收藏)
2017/03/16 Javascript
vue中的计算属性的使用和vue实例的方法示例
2017/12/04 Javascript
JavaScript实现京东购物放大镜和选项卡效果的方法分析
2018/07/05 Javascript
深入理解Promise.all
2018/08/08 Javascript
jQuery常见的遍历DOM操作详解
2018/09/05 jQuery
vue中的inject学习教程
2019/04/24 Javascript
Vue.set 全局操作简单示例
2019/09/19 Javascript
Python 的 Socket 编程
2015/03/24 Python
用Python的pandas框架操作Excel文件中的数据教程
2015/03/31 Python
django与小程序实现登录验证功能的示例代码
2019/02/19 Python
python 为什么说eval要慎用
2019/03/26 Python
Python 异步协程函数原理及实例详解
2019/11/13 Python
Python3列表List入门知识附实例
2020/02/09 Python
一张图片能隐含千言万语之隐藏你的程序代码
2012/12/13 HTML / CSS
Canvas在超级玛丽游戏中的应用详解
2021/02/06 HTML / CSS
意大利奢侈品综合电商网站:MODES
2019/12/14 全球购物
高中生学习的自我评价
2013/12/14 职场文书
大学生职业生涯规划书模板
2014/01/03 职场文书
2014年公司植树节活动方案
2014/03/04 职场文书
会计专业应届生自荐信
2014/06/28 职场文书
公证委托书
2014/08/01 职场文书
乡镇机关党员民主评议表自我评价
2014/09/21 职场文书
小学语文教学随笔
2015/08/14 职场文书
在K8s上部署Redis集群的方法步骤
2021/04/27 Redis