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('111')
})
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事件时,进行操作(我这里是页面强制刷新)

 

 

 

如果有对聊天室特别感兴趣的同学

这里有一份我百度的时候找到的大佬的代码

并且附上大佬的链接

代码在这个链接里有一个如何运行实例,点击下载源码即可。

可以参考 

 

 

以上。

转载于:https://www.cnblogs.com/yangyangxxb/p/10450457.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue.js 和 Node.js 可以一起实现消息推送的功能。下面是一种简单的实现方式: 1. 在 Vue.js 中,使用 WebSocket 进行实时通信。可以使用 `vue-native-websocket` 或 `vue-socket.io` 等库来简化开发。 2. 在 Node.js 中,使用 `socket.io` 库来处理 WebSocket 的连接和消息推送。 下面是一个简单的示例代码: 在 Vue.js 中: ```javascript // 安装 vue-native-websocket npm install vue-native-websocket import VueNativeSock from 'vue-native-websocket'; Vue.use(VueNativeSock, 'ws://localhost:3000', { reconnection: true, reconnectionAttempts: 5, reconnectionDelay: 3000, }); new Vue({ // ... }); ``` 在 Node.js 中: ```javascript // 安装 socket.io npm install socket.io const express = require('express'); const http = require('http'); const socketIO = require('socket.io'); const app = express(); const server = http.Server(app); const io = socketIO(server); io.on('connection', (socket) => { console.log('A client connected'); // 接收客户端发送的消息 socket.on('message', (data) => { console.log('Received message:', data); // 广播消息给所有连接的客户端 io.emit('message', data); }); // 客户端断开连接 socket.on('disconnect', () => { console.log('A client disconnected'); }); }); server.listen(3000, () => { console.log('Server listening on port 3000'); }); ``` 以上代码实现了一个简单的消息推送功能。当客户端连接到服务器后,可以发送消息,并且服务器会将消息广播给所有连接的客户端。 需要注意的是,这只是一个简单的示例,实际应用中可能需要添加身份验证、权限控制等功能来保证安全性和可靠性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值