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 相关文章推荐
给Flash加一个超链接(推荐使用透明层)兼容主流浏览器
Jun 09 Javascript
javasciprt下jquery函数$.post执行无响应的解决方法
Mar 13 Javascript
jQuery中delegate()方法用法实例
Jan 19 Javascript
JavaScript中诡异的delete操作符
Mar 12 Javascript
JavaScript动态修改背景颜色的方法
Apr 16 Javascript
Bootstrap表单组件教程详解
Apr 26 Javascript
jQuery判断网页是否已经滚动到浏览器底部的实现方法
Oct 27 jQuery
angularjs数组判断是否含有某个元素的实例
Feb 27 Javascript
vue页面切换到滚动页面显示顶部的实例
Mar 13 Javascript
javascript设计模式 ? 适配器模式原理与应用实例分析
Apr 13 Javascript
Auto.JS实现抖音刷宝等刷视频app,自动点赞,自动滑屏,自动切换视频功能
May 08 Javascript
JS绘图Flot如何实现动态可刷新曲线图
Oct 16 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
PHP表单提交表单名称含有点号(.)则会被转化为下划线(_)
2011/12/14 PHP
PHP中计算字符串相似度的函数代码
2012/12/29 PHP
php连接mysql数据库
2017/03/21 PHP
浅谈PHP中的Trait使用方法
2019/03/22 PHP
laravel excel 上传文件保存到本地服务器功能
2019/11/14 PHP
Javascript 获取滚动条位置等信息的函数
2009/09/08 Javascript
javascript 读取XML数据,在页面中展现、编辑、保存的实现
2009/10/27 Javascript
jQuery+PHP星级评分实现方法
2015/10/02 Javascript
Js类的静态方法与实例方法区分及jQuery拓展的两种方法
2016/06/03 Javascript
jQuery遍历节点树方法分析
2016/09/08 Javascript
分享一个原生的JavaScript拖动方法
2016/09/25 Javascript
JS瀑布流实现方法实例分析
2016/12/19 Javascript
JSON与js对象序列化实例详解
2017/03/16 Javascript
微信小程序开发入门基础教程
2017/04/19 Javascript
nodejs中解决异步嵌套循环和循环嵌套异步的问题
2017/07/12 NodeJs
jQuery.Sumoselect插件实现下拉复选框效果
2017/11/09 jQuery
使用typescript开发angular模块并发布npm包
2018/04/19 Javascript
Javascript模块化机制实现原理详解
2020/04/02 Javascript
使用Vue Composition API写出清晰、可扩展的表单实现
2020/06/10 Javascript
用Python的Django框架来制作一个RSS阅读器
2015/07/22 Python
使用XML库的方式,实现RPC通信的方法(推荐)
2017/06/14 Python
Python爬虫实现全国失信被执行人名单查询功能示例
2018/05/03 Python
设置python3为默认python的方法
2018/10/31 Python
对python opencv 添加文字 cv2.putText 的各参数介绍
2018/12/05 Python
python 自定义对象的打印方法
2019/01/12 Python
Python中__repr__和__str__区别详解
2019/11/07 Python
Python: glob匹配文件的操作
2020/12/11 Python
解决margin 外边距合并问题
2019/07/03 HTML / CSS
String、StringBuffer、StringBuilder有区别
2015/09/18 面试题
毕业生自我鉴定
2013/11/05 职场文书
《郑和远航》教学反思
2014/04/16 职场文书
双方协议书
2014/04/22 职场文书
2016年百日安全生产活动总结
2016/04/06 职场文书
心得体会该怎么写呢?
2019/06/27 职场文书
Python 游戏大作炫酷机甲闯关游戏爆肝数千行代码实现案例进阶
2021/10/16 Python
漫画《尖帽子的魔法工坊》宣布动画化
2022/04/06 日漫