|
|
3 years ago | |
|---|---|---|
| build | 3 years ago | |
| src | 3 years ago | |
| test | 3 years ago | |
| .gitignore | 3 years ago | |
| .gitmodules | 3 years ago | |
| .travis.yml | 3 years ago | |
| LICENSE | 3 years ago | |
| README.md | 3 years ago | |
| binding.gyp | 3 years ago | |
| client.js | 3 years ago | |
| gruntfile.js | 3 years ago | |
| include_dirs.js | 3 years ago | |
| index.js | 3 years ago | |
| kcpServer.js | 3 years ago | |
| package.json | 3 years ago |
KCP Protocol for Node.js
1. win10 vistduio 2017
2. node 16.15.1
npm install -g node-gyp
node-gyp configure
git clone git@github.com:leenjewel/node-kcp
cd node-kcp
git submodule init
git submodule update
node-gyp build
npm install node-kcp
var kcp = require('node-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];
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);
var kcp = require('node-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++));
If you want to use node-kcp in pomelo server, you need pomelo-kcp