socket应用(vue、node.js、M站)
socket应用(vue、node.js、M站)
前言:我们在做一些项目的时候需要做到实时变化,
比如我们有时候有需求会要求我们做一个类似于聊天室的页面
比如有些时候我们对某些东西进行点赞和刷票,需要实时显示出来
如果我们设置定时刷新内容,是一个比较不合适的事情(定时请求接口对性能会造成影响),所以我们需要socket来为我们提供实时性
Node.js与socket
我这个小项目是用Node自己给自己写的后台,使用了socket.io
首先启动一个socket服务
const server = require('http').createServer(()=>{
res.end('')
})
var io = require('socket.io')(server);
server.listen(9002)
//这个socket.io就是我们要使用的插件,
//随便你npm、cnpm还是yarn,把它给加进来
//这个9002是端口号,特指socket的端口号,不要与Node的端口号重复
明确需求触发socket
这个明确需求是什么意思呢,就是现在我们与socket已经建立链接了,那么我们在什么情况下触发socket?
比如我做个这个点赞,就是在用户触发点赞接口的时候,要触发socket
router.post('/updateZan', async (req, res) => {
//...省略内部操作
io.emit('msg','update')
}) //其实重点只有最后一句,那就是io.emit
//仔细看看像不像vue 的eventHub
//前面的msg是为这次的socket服务起的名字,
//后面的update就是这次的socket服务要向前端传输的内容
如此,Node.js这里就结束了
让我们镜头一转,看向前端需要哪些操作呢
Vue与socket
vue搭配socket更是方便的不行,因为vue有很多现成的插件
从main.js开始
import VueSocketio from 'vue-socket.io';
import socketio from 'socket.io-client';
//这两个都是插件,给我安排上 Vue.use(VueSocketio, socketio('http://localhost:9002/'));//与websocket服务端链接 new Vue({
router,
store,
sockets: {
connect: function () {
console.log('socket connected');
}
},
render: h => h(App)
}).$mount('#app') //还记得我刚刚提醒你们的端口号么,这里不要写错了
这里有个小坑坑,我刚开始只要main.js写成以上这样就会报错
TypeError: Cannot call a class as a function
解决方法:是安装的包版本不太行(具体原因我也不清楚)
把node_modules删掉,在package.json中把vue-socket.io版本改成"vue-socket.io": "^2.1.1-a"
然后重新install
解决
具体的.vue里
与data、methods同级的地方
sockets:{ //在此接收又服务器发送过来的数据 ps:注意此处的方法名要与服务器的发送的事件保持一致才能接收到
msg: function (val) {
console.log('接收到服务端消息1111', val);
this.getContent()
this.getCommit()
}
},
//还记得msg么,我刚刚起的名字,每当这个时候我就重新调取赞的数量接口,如此就实现了我所需要的实时
m站与socket
m站的原理也是:与后台的socket进行端口号绑定,并且当触发msg事件时,进行操作(我这里是页面强制刷新)
如果有对聊天室特别感兴趣的同学
这里有一份我百度的时候找到的大佬的代码,
并且附上大佬的链接,
代码在这个链接里有一个如何运行实例,点击下载源码即可。
可以参考
以上。
socket应用(vue、node.js、M站)的更多相关文章
- vue+node.js+webpack开发微信公众号功能填坑——v -for循环
页面整体框架实现,实现小功能,循环出数据,整体代码是上一篇 vue+node.js+webpack开发微信公众号功能填坑--组件按需引入 修改部门代码 app.vue <yd-flexbox&g ...
- TCP Socket Programming in Node.js
TCP Socket Programming in Node.js Posted on October 26th, 2011 under Node.jsTags: Client, node.js, S ...
- 小白学习VUE第二课:环境搭建 VUE Node.js VSCode template模板
环境搭建 VUE Node.js VSCode template模板: 首先安装node:http://www.runoob.com/nodejs/nodejs-install-setup.html ...
- mongodb & vue & node.js
mongodb mongodb & vue & node.js https://docs.mongodb.com/manual/tutorial/install-mongodb-on- ...
- 基于Unix Socket的可靠Node.js HTTP代理实现(支持WebSocket协议)
实现代理服务,最常见的便是代理服务器代理相应的协议体请求源站,并将响应从源站转发给客户端.而在本文的场景中,代理服务及源服务采用相同技术栈(Node.js),源服务是由代理服务fork出的业务服务(如 ...
- 基于Vue+node.js的个人博客
前言 作为一个年轻的程序员,而且是作为一个未来的前端工程师,怎么能没有一个属于自己的博客呢,于是乎在暑假咸鱼了一个多月后开始了我的博客的编写. 技术栈 前端 vue.js+scss 因为当时没学vu ...
- Vue+node.js+express+mysql实例---对图书信息进行管理
一个简单的 CURD 实例 ---对图书信息进行管理 目录 1 开发环境 1.1 前端开发环境 1.2 后端开发环境 2 数据库设计和创建 2.1 数据库和表设计 2.2 book 表设计 2.3 s ...
- 对www.518shengmao.com站资源打包,采用vue Node.js
最近闲游时间比较多,于是想搞个网站练练手,首先选域名在godday里选了个518shengmao.com,买了个1元的阿里云服务器,接下来程序了. 采用vue+nodejs来开发的 一.NodeJs环 ...
- Vue node.js商城-购物车模块
一.渲染购物车列表页面 新建src/views/Cart.vue获取cartList购物车列表数据就可以在页面中渲染出该用户的购物车列表数据 data(){ return { car ...
- Vue+node.js实现一个简洁的个人博客系统
本项目是一个用vue和node以及mysql实现的一个简单的个人博客系统,整体逻辑比较简单.但是可以我们完整的了解一个项目从数据库到后端到前端的实现过程,适合不太懂这一块的朋友们拿来练手. 本项目所用 ...
随机推荐
- bui前端框架+yii整理
这个是做bui前端样式整合的时候记录的. 首先当然是要下载一个yii的源码,搭建起来. 第一步将bui的样式迁移到yii的样式目录中去 这里我在样式外面加了一个bui的文件夹,表示这个文件夹中存放的是 ...
- Flutter进阶—点击、拖动和其他手势
Flutter中的手势系统有两个层次.第一层具有原始指针事件,其描述了穿过屏幕的指针(例如触摸.鼠标和触控笔)的位置和移动.第二层具有手势,其描述由一个或多个指针移动组成的语义动作. 指针指针代表用户 ...
- centos7救援模式--误删/usr/bin/恢复
模拟场景 centos7 误删/usr/bin/等系统内置文件夹, 导致几百个内置命令丢失. 修复 rescue模式 vm模拟一遍(如果在物理机, 可通过U盘方式直接开机U盘进入选择救援模式, 方式通 ...
- 解决 “MoveFile”: 类型库“XXX.dll”中的标识符已经是宏;使用“rename”限定符 类型库符号与系统符号冲突问题
今天在VS工程当中引入一个组件,编译的时候出现警告, “MoveFile”: 类型库“XXX.dll”中的标识符已经是宏:使用“rename”限定符.虽然只是一个警告,但看着实在不爽,更重要的是,警告 ...
- Spring之bean的生命周期
这篇博文是spring生命周期的详解,目前限于作者自身的水平对于一些内容可能只知其然不知其所以然,所以博文中如果出现错误欢迎各位指出,同时我也会逐步提升自己的水平,争取能够多发布一些能让大家获益的博文 ...
- 解决 EDAS:Upload failed: The right margin is 0.535 in on page 1 问题
参考: IEEETran page margins 解决 EDAS:Upload failed: The right margin is 0.535 in on page 1 问题 在 EDAS 上上 ...
- java基础之集合框架--使用ArrayList类动态 存储数据
一.ArrayList是List接口下的一个实现类,实现了长度可变的.连续的数组:拥有数组的特性. 遵循了LIst的规则:不唯一的.有序的. 如果没有增加泛型的话,集合中可以添加任何类型的数据. 使用 ...
- abap 常用 function
ABAP常用函数总结 alv .smartform. excel .text.邮件 .远程访问,FTP服务器... **********常用功能function REUSE_ALV_GRID_DI ...
- python程序—士兵出击
class Gun: def __init__(self,gun_type): self.gun_type=gun_type self.bullet_count= def add_bullet(sel ...
- 初学者易上手的SSH-spring 01控制反转(IOC)
这章开始学习SSH中最后的一个框架spring.Spring是一个开放源代码的设计层面框架,他解决的是业务逻辑层和其他各层的松耦合问题,因此它将面向接口的编程思想贯穿整个系统应用. 首先就来学习一下I ...