1.0.0 • Published 6 years ago

easy-socket-node v1.0.0

Weekly downloads
3
License
MIT
Repository
github
Last release
6 years ago

easy-socket-node: websocket server for Node.js,depend on ws

Installing

npm install easy-socket-node --save

Use

import EasySocket from 'easy-socket-node';

const config = {
    port: 3001,
    perMessageDeflate: {
        zlibDeflateOptions: { // See zlib defaults.
            chunkSize: 1024,
            memLevel: 7,
            level: 3,
        },
        zlibInflateOptions: {
            chunkSize: 10 * 1024
        },
        // Other options settable:
        clientNoContextTakeover: true, // Defaults to negotiated value.
        serverNoContextTakeover: true, // Defaults to negotiated value.
        clientMaxWindowBits: 10,       // Defaults to negotiated value.
        serverMaxWindowBits: 10,       // Defaults to negotiated value.
        // Below options specified as default values.
        concurrencyLimit: 10,          // Limits zlib concurrency for perf.
        threshold: 1024,               // Size (in bytes) below which messages
        // should not be compressed.
    }
}

const easySocket = new EasySocket();
easySocket
    .listen(config)

console.log('Now start WebSocket server on port ' + config.port + '...')

See ws for more options

connection Middleware

const easySocket = new EasySocket();
easySocket
    .connectionUse((context,next)=>{
       console.log("new Connected");
       let location = url.parse(context.req.url, true);
       let token=location.query.token;
       if(!token){
           client.send("invalid token");
           client.close(1003, "invalid token");
           return;
       }
       context.client.token=token;
       next();
    })
    .listen(config)

context properties:

propertydescription
serverinstance of EasySocket
clientcurrent connect client
reqreq.url

close Middleware

const easySocket = new EasySocket();
easySocket
    .closeUse((context,next)=>{
        let server = context.server;
        let client = context.client;
        let code = context.code;
        let reason = context.message;
        if (code === 1003 && reason === 'invalid token') {
            console.log("'invalid token' closed")
        }else{
            console.log(client.token + " closed");
        }
        next();
    })

context properties:

propertydescription
serverinstance of EasySocket
clientcurrent client
codeclose code
messageclose reason

message Middleware

const easySocket = new EasySocket();
easySocket
    .messageUse((context,next)=>{
        if (context.req.type === 'event' && context.req.event === 'addRoom') {
            if (!context.server.roomMap) {
                context.server.roomMap = new Map();
            }
            let roomId = shortid.generate();
            context.req.args.id = roomId;
            context.server.roomMap.set(roomId, {
                id:roomId,
                name: context.req.args.name,
                userList: []
            });
        }
        console.log(context.client.token+' send '+context.req);
        next();
    })

receive {"type":"event","event":"addRoom","args":{"name":"myroom"}} from browser

then context.req is {"type":"event","event":"addRoom","args":{"name":"myroom"}}

context properties:

propertydescription
serverinstance of EasySocket
clientcurrent client
reqreceive message from client

error Middleware

const easySocket = new EasySocket();
easySocket
    .errorUse((context,next)=>{
        console.log(context.error);
        next();
    })

context properties:

propertydescription
serverinstance of EasySocket
clientcurrent client
errorerror

remoteEmit Middleware

const easySocket = new EasySocket();
easySocket
    .messageUse((context,next)=>{
        if (context.req.type === 'event') {
            context.server.emit(context.req.event, context.req.args);//will call remoteEmit Middleware 
        }
        next();
    })
    .remoteEmitUse((context,next)=>{
        let server = context.server;
        let event = context.event;
        //broadcast
        for (let client of server.clients.values()) {
            client.send({
                type: 'event',
                event: event.event,
                args: event.args
            });
        }
    })

receive {"type":"event","event":"addRoom","args":{"name":"myroom"}} from browser

then send {"type":"event","event":"addRoom","args":{"name":"myroom"}} to all clients

context properties:

propertydescription
serverinstance of EasySocket
eventevent and args

example and online demo

chat example

online chat demo

1.0.0

6 years ago