最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • socket.io初体验

    正文概述 掘金(Thezero)   2021-03-31   848

    个人博客网站欢迎交流:萤火之森:https://blog.xkongkeji.com

    什么是socket.io

    Socket.IO 是一个封装了 Websocket、基于 Node 的 JavaScript 框架,包含 client 的 JavaScript 和 server 的 Node。其屏蔽了所有底层细节,让顶层调用非常简单。另外,Socket.IO 还有一个非常重要的好处。其不仅支持 WebSocket,还支持许多种轮询机制以及其他实时通信方式,并封装了通用的接口。这些方式包含 Adobe Flash Socket、Ajax 长轮询、Ajax multipart streaming 、持久 Iframe、JSONP 轮询等。换句话说,当 Socket.IO 检测到当前环境不支持 WebSocket 时,能够自动地选择最佳的方式来实现网络的实时通信。

    客户端(vue+vue-socket.io)

    安装

    npm install vue-socket.io --save
    

    实现

    • 引入vue-socket.io
    import VueSocketIO from 'vue-socket.io'
    Vue.use(new VueSocketIO({
      debug: true,
      connection: '你的地址',
      vuex: {
      }
    }))
    
    • 监听服务端自定义事件
     sockets: {
        // 服务器事件名字
        msg: function (data) {
          console.log(data);
        }, // 举个例子 服务器传来 msg消息
        online: function (data) {
          console.log(data);
        },
      },
    

    注意:sockets 与 methods 同级 不在methods内

    可能遇到的问题链接请求跨域问题

    • 在vue.config.js配置一下代理
     proxy: {
        '/socket.io': {
         target: 'http://localhost:9000',
         ws: true,
         changeOrigin: true
        },
        '/sockjs-node': {
         target: 'http://localhost:9000',
         ws: false,
         changeOrigin: true
        },
    }
    

    node服务端(express+socket.io)

    安装

    npm install socket.io --save
    

    实现

    const app = require('express')();
    const server = require('http').Server(app);
    const io = require('socket.io')(server, {allowEIO3: true, cors: true });
    
    server.listen(9000);
    
    // 解决跨域问题
    app.all('*', function(req, res, next) {
      res.header("Access-Control-Allow-Origin", "*");
      res.header("Access-Control-Allow-Methods", "GET,HEAD,OPTIONS,POST,PUT");
      res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept, Authorization");
      next();
    });
    
    let user = [];
    let userOnline = []
    io.on('connection', function (socket) {
      socket.on('login', function (data) {
        if(socket.client.id in userOnline){
          console.log('你已经来过了')
        }else {
          user.push({
            id:socket.id,
            name:data.name,
            socket:socket
          })
          userOnline.push({
            id:socket.id,
            name:data.name,
          })
        }
        socket.emit('online',{'user':userOnline})
        socket.broadcast.emit('msg',{'user':data.name})
      });
      socket.on('submitmsg',(data)=>{
        console.log(data)
        socket.broadcast.emit('msg',data)
      })
      socket.on('disconnect',()=>{
        for (let i = 0; i <  userOnline.length; i++) {
          if(socket.id === userOnline[i].id){
            userOnline.splice(i,1)
          }
        }
        for (let i = 0; i <  user.length; i++) {
          if(socket.id === user[i].id){
            console.log(user[i].name +'走了')
            user.splice(i,1)
          }
        }
      })
    });
    
    
    • 至此便实现了socket的简单通讯

    socket.io初体验

    socket.io初体验


    起源地下载网 » socket.io初体验

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元