*nix Programming Mammals

    udp-kcp

    1.1.15 • Public • Published

    udp-kcp

    Build Status

    KCP Protocol for Node.js

    Notice

    
    Based on github.com/leenjewel/node-kcp, and add a function getconv, 
    which may be useful when you need multiple udp connections with 
    the same host and port, i.e. among peer hosts
    
    

    Example:

    Install by npm

    npm install udp-kcp
    

    udpserver.js

    var kcp = require('udp-kcp');
    var dgram = require('dgram');
    var server = dgram.createSocket('udp4');
    var clients = {};
    var interval = 200;
    
    var output = function(data, size, context) {
        server.send(data, 0, size, context.port, context.address);
    };
    
    server.on('error', (err) => {
        console.log(`server error:\n${err.stack}`);
        server.close();
    });
    
    server.on('message', (msg, rinfo) => {
        var k = rinfo.address+'_'+rinfo.port;
        if (undefined === clients[k]) {
            var context = {
                address : rinfo.address,
                port : rinfo.port
            };
            var kcpobj = new kcp.KCP(123, context);
            kcpobj.nodelay(0, interval, 0, 0);
            kcpobj.output(output);
            clients[k] = kcpobj;
        }
        var kcpobj = clients[k];
        console.log('conv: ', kcpobj.getconv(data));
        kcpobj.input(msg);
    });
    
    server.on('listening', () => {
        var address = server.address();
        console.log(`server listening ${address.address} : ${address.port}`);
        setInterval(() => {
            for (var k in clients) {
                var kcpobj = clients[k];
            	kcpobj.update(Date.now());
            	var recv = kcpobj.recv();
            	if (recv) {
                	console.log(`server recv ${recv} from ${kcpobj.context().address}:${kcpobj.context().port}`);
               		kcpobj.send('RE-'+recv);
           	 	}
           	}
        }, interval);
    });
    
    server.bind(41234);
    
    

    udpclient.js

    var kcp = require('udp-kcp');
    var kcpobj = new kcp.KCP(123, {address: '127.0.0.1', port: 41234});
    var dgram = require('dgram');
    var client = dgram.createSocket('udp4');
    var msg = 'hello world';
    var idx = 1;
    var interval = 200;
    
    kcpobj.nodelay(0, interval, 0, 0);
    
    kcpobj.output((data, size, context) => {
        client.send(data, 0, size, context.port, context.address);
    });
    
    client.on('error', (err) => {
        console.log(`client error:\n${err.stack}`);
        client.close();
    });
    
    client.on('message', (msg, rinfo) => {
        kcpobj.input(msg);
    });
    
    setInterval(() => {
        kcpobj.update(Date.now());
        var recv = kcpobj.recv();
        if (recv) {
            console.log(`client recv ${recv}`);
            kcpobj.send(msg+(idx++));
        }
    }, interval);
    
    kcpobj.send(msg+(idx++));
    
    

    About Pomelo and Pomelo-kcp

    If you want to use udp-kcp in pomelo server, you need pomelo-kcp

    Install

    npm i udp-kcp

    DownloadsWeekly Downloads

    0

    Version

    1.1.15

    License

    Apache-2.0

    Unpacked Size

    11.3 MB

    Total Files

    80

    Last publish

    Collaborators

    • liufanghua2012