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

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

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

    并且附上大佬的链接

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

    可以参考 

    以上。

  • 相关阅读:
    C#获取MD5哈希字符串
    C#序列化和反序列化Json数据
    C# Http请求
    C#DAL数据访问层
    C# ThreadPool.QueueUserWorkItem()之线程池异步
    C#以文件夹共享方式实现2G以上大文件传输
    该进程不具有执行此操作所需的“SeSecurityPrivilege”特权
    IIS绑定网站用域名进行访问的过程
    js获取url指定参数值
    js闭包(for循环内给元素添加事件)
  • 原文地址:https://www.cnblogs.com/yangyangxxb/p/10450457.html
Copyright © 2020-2023  润新知