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 相关文章推荐
关于jQuery对象数据缓存Cache原理以及jQuery.data详解
Apr 07 Javascript
快速解决jQuery与其他库冲突的方法介绍
Jan 02 Javascript
JQuery弹出炫丽对话框的同时让背景变灰色
May 22 Javascript
JQuery实现table行折叠效果以JSON做数据源
May 26 Javascript
详解AngularJS如何实现跨域请求
Aug 22 Javascript
浅谈JS的基础类型与引用类型
Sep 13 Javascript
vue2 前后端分离项目ajax跨域session问题解决方法
Apr 27 Javascript
详解Vue-cli中的静态资源管理(src/assets和static/的区别)
Jun 19 Javascript
详解Angular如何正确的操作DOM
Jul 06 Javascript
微信小程序网络请求封装示例
Jul 24 Javascript
this.$toast() 了解一下?
Apr 18 Javascript
jquery中attr、prop、data区别与用法分析
Sep 25 jQuery
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中array_rand函数的使用方法
2016/09/11 PHP
Laravel 队列使用的实现
2019/01/08 PHP
PHP程序员简单的开展服务治理架构操作详解(二)
2020/05/14 PHP
IE6下CSS图片缓存问题解决方法
2010/12/09 Javascript
JQuery 选择器、过滤器介绍
2011/02/14 Javascript
一个JQuery写的点击上下滚动的小例子
2011/08/27 Javascript
JQuery获取样式中的background-color颜色值的问题
2013/08/20 Javascript
node.js中的fs.futimes方法使用说明
2014/12/17 Javascript
js使用split函数按照多个字符对字符串进行分割的方法
2015/03/20 Javascript
angularjs创建弹出框实现拖动效果
2020/08/25 Javascript
jQuery遍历json的方法(推荐)
2016/06/12 Javascript
DropDownList实现可输入可选择(两种版本可选)
2016/12/07 Javascript
JavaScript下拉菜单功能实例代码
2017/03/01 Javascript
Vue.js中组件中的slot实例详解
2017/07/17 Javascript
node.js学习之事件模块Events的使用示例
2017/09/28 Javascript
详解如何使用PM2将Node.js的集群变得更加容易
2017/11/15 Javascript
IE8中jQuery.load()加载页面不显示的原因
2018/11/15 jQuery
详解element-ui设置下拉选择切换必填和非必填
2019/06/17 Javascript
js变量值传到php过程详解 将php解析成数据
2019/06/26 Javascript
Angular8路由守卫原理和使用方法
2019/08/29 Javascript
使用 Github Actions 自动部署 Angular 应用到 Github Pages的方法
2020/07/20 Javascript
VUE中鼠标滚轮使div左右滚动的方法详解
2020/12/14 Vue.js
javascript实现点击产生随机图形
2021/01/25 Javascript
django批量导入xml数据
2016/10/16 Python
Python嵌套式数据结构实例浅析
2019/03/05 Python
pytorch查看模型weight与grad方式
2020/06/24 Python
python怎么自定义捕获错误
2020/06/29 Python
ASICS印度官方网站:日本专业运动品牌
2020/06/20 全球购物
2014年师德承诺书
2014/05/23 职场文书
2014-2015学年工作总结
2014/11/27 职场文书
面试通知单大全
2015/04/20 职场文书
诚实守信主题班会
2015/08/13 职场文书
上班旷工检讨书
2015/08/15 职场文书
导游词之扬州大明寺
2019/10/09 职场文书
Golang流模式之grpc的四种数据流
2022/04/13 Golang