socket.Io的简单使用

Posted 知更鸟的早晨

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了socket.Io的简单使用相关的知识,希望对你有一定的参考价值。

在vue中使用socket.Io

安装 npm install socket.io

1创建一个socketIo.js的js文件

var http = require('http');

var app = http.createServer(function(reqres) {

    res.end(data)

})

console.log('app服务器开启成功');

//引入socket.io

var io = require('socket.io')(app)

    //connection为自带的方法,类似生命周期里面的创建,连接后就会触发

io.on("connection"function(socket) {

    console.log('一个用户与服务器建立连接'socket.handshake.query.id.toString())

    //将加入的用户根据其传过来的id放入固定的房间中

    socket.join(socket.handshake.query.id.toString());

    //服务器获取客户端广播的数据

    socket.on('news'function(data) {

            for (let z = 0z < data.newForMyApproval.lengthz++) {

                io.to(data.newForMyApproval[z].toString()).emit('newForMyApproval''增加了一条审批'//通知分组内所有的用户

            }

            for (let i = 0i < data.newCcToMe.lengthi++) {

                io.to(data.newCcToMe[i].toString()).emit('newCcToMe''增加了一条抄送'//通知分组内所有的用户

            }

        })

        // 接收到消息页的消息

    socket.on("userChat"function(data) {

            io.to(data.receiveNews.toString()).emit('newNews'data)

        })

        // 当关闭连接后触发 disconnect 事件

    socket.on('disconnect'function() {

        console.log(socket.handshake.query.id.toString(), '与服务器断开连接');

    });

})

app.listen(3120)//3120为链接的端口号

搭载node.js服务器,在文件所在的位置打开命令行输入 node socketIo.js

2 在main.js中引入socket.io

import VueSocketio from 'vue-socket.io';

if (JSON.parse(localStorage.getItem("USERNAMEID"))) {//判断本地是否有存用户id数据

    Vue.use(new VueSocketio({

        debug: true,//开发环境看socket.io的配置,开发结束改为false

        connection: '127.0.0.1:3120' + 'id=' + JSON.parse(localStorage.getItem("USERNAMEID")).id,

    }))//connection为项目端口位置,"+"?id的内容为向socket.io传递连接用户的数据

}

3在需要的接收的位置添加(入全局接收写在APP.vue中

sockets: {//和methods平级,socket.io触发的方法都写内部

        //断开重连

        reconnect(data) {

            console.log("第几次重新连接"data);

        },

        // socket传进一条审批

        newForMyApproval(msg) {

            let data = this.$store.state.Advanced.forMyApproval + 1;

            console.log(msg);

            this.$store.dispatch("FETCH_forMyApproval"data);

        },

        // socket传进一条抄送

        newCcToMe(msg) {

            let data = this.$store.state.Advanced.ccToMe + 1;

            console.log(msg);

            this.$store.dispatch("FETCH_ccToMe"data);

        }

    },

此sockets:{}可以写在任意的.vue文件中,当socketIo.js内部emit('方法名','传递的数据)时.所以文件内部sockets:{}里的特定方法都会被触发

最后是socket.Io的常用方法及API官网

//socket.io的API网站      https://www.cnblogs.com/dreamsqin/p/12018866.html

//发送

 socket.emit('addcart', {client: '我是客户端的数据'})

//接收

socket.on('addcart'function(data) {

  console.log("获取到客户端数据"data)})

//单发

socket.emit('to-client'"服务器的数据")//单发,谁发给我,我发给谁

//群发

io.emit('to-client'"服务器的数据")//群发,给所有的用户都广播数据

//分组

socket.join(roomID)//加入的分组id

//分组群发

io.to(roomID).emit('addCart','群发消息')//通知分组内所有的用户

//发分组其他人

socket.broadcast.to(roomID).emit('addCart',"只有我不知道的消息")//通知分组内的用户不包括自己


以上是关于socket.Io的简单使用的主要内容,如果未能解决你的问题,请参考以下文章

socket.Io的简单使用

何时使用 socket.io ?以及何时使用简单的 Http 调用? [复制]

简单的游戏循环 Socket.io + Node.js + Express

socket.io实践(一.实现简单的图表推送)

将简单的 Socket.io Flask 应用程序部署到 Google App Engine:仍未解决

在vue中使用socket.io