socket.io-rooms

1.0.1 • Public • Published

多房间聊天室案例

本案例采用socket.io实现多房间多人聊天,主要实现了两个类,一个是用户User,一个是房间Rooms

安装使用

npm install socket.io-rooms --save

demo演示

把项目clone下来后,执行npm start,然后打开example/index.html即可品尝到演示效果

使用方式

服务端

const {User,Rooms}  = require('socket.io-rooms')
const server = require('http').createServer();
const io = require('socket.io')(server);

//大厅
io.on('connection', client => {
    let user = new User();
    client.emit('user',user);
    client.on('join', data => {
        /* 加入某个房间 */
        Rooms.join(data,user,io,client)
    });
    client.on('message',msg=>{
        if(user.roomId){
            // io.to(user.roomId).emit('message',msg)
            if(msg.type == 'update'){
                user.update(msg.body);
            }
            msg.user = user.uid;
            Rooms.send(user.roomId,msg)
        }else{
            io.emit('message',msg)
        }
        console.log(msg)
    })
    client.on('disconnect', () => {
        /* … */
        console.log("连接断开")
        Rooms.leave(user)
    });
});
server.listen(80);

这里传输统一使用JSON格式,消息title也以message为主,这里端口写的80,你可以使用其他端口,如果你是Express,也可以共用80端口。

客户端调用

const socket = io('http://localhost');
log =(...args)=>{
    document.getElementById('log').innerHTML +='<br/>'+args.map(item=>JSON.stringify(item)).join(' ')+'=>'+(+new Date());
} 

log(socket.id)
let user ={},room,client;
socket.on('connect', (c) => {
    log('connect ...', socket.id);
    socket.on('user',u=>{
        user = u;
        log('用户ID',u.uid)
    });
});
socket.on('message',msg=>{
    log('message:',msg)
});
function joinroom(num){
    //加入房间号为1的房间
    socket.emit('join',num);
}
function send(){
    let msg = document.getElementById('msg').value;
    socket.emit('message',{type:'TALK',body:msg})
    // setInterval(function(){
    //     socket.emit('message',{type:'TALK',body:+new Date()})
    // },2000)
}

Readme

Keywords

Package Sidebar

Install

npm i socket.io-rooms

Weekly Downloads

8

Version

1.0.1

License

ISC

Unpacked Size

8.3 kB

Total Files

9

Last publish

Collaborators

  • tianxiangbing