Node.js TCP服务器从客户端获取“数据”事件的延迟

时间:2019-02-03 07:31:53

标签: node.js typescript tcp

我使用原生的“ net”模块在Node.js中设置了两个TCP服务器。 一种使用TypeScript编写,另一种使用普通的JavaScript。

一个普通的JS表现出预期,但一个TS却没有实时接收到“数据”事件。数据事件之间似乎存在延迟。

我尝试在tsconfig中更改target属性,但没有任何区别。

这是TS版本

import { createServer, Socket } from 'net';
import GameConnection from './network/GameConnection';

class Server {
    public port: number;
    public clients: Socket[] = [];
    constructor(port: number) {
        this.port = port;
    }

    start(): this {
        createServer(socket => {
            const conn = new GameConnection(socket);
            console.log('client connected');

            this.clients.push(socket);

            socket.on('data', d => {
                conn.onData(d, d.byteOffset, d.byteLength);
            });

            socket.on('close', had_error => {
                if (had_error) {
                    //socket was closed due to an error
                }
                console.log('client socket closed');
                this.clients.splice(this.clients.indexOf(socket), 1);
            });
        })
            .on('error', err => {
                console.log(err);
            })
            .listen(this.port, () => {
                console.log('server bound');
            });

        return this;
    }
}

export default Server;

tsconfig.json

{
    "compilerOptions": {
        "target": "es6",
        "module": "commonjs",
        "outDir": "dist",
        "rootDir": "./",
        "strict": true,
        "strictFunctionTypes": true
    },
    "exclude": ["node_modules"]
}

这是JS版本

const net = require('net');
const GameConnection = require('./network/GameConnection');

const server = net.createServer(c => {
    const conn = new GameConnection(c);
    console.log('client connected');

    c.on('data', d => {
        conn.onData(d, d.byteOffset, d.byteLength);
    });
});

server.on('error', err => {
    console.log(err);
});

server.listen(43332, () => {
    console.log('server bound');
});

当客户端连接时,它应立即立即连续触发两个事件。 JS服务器可以很好地接收这两个事件,但是在服务器的TS版本中,这些事件之间存在大约2-3秒的延迟。

即使在发生初始事件之后,TS服务器似乎总是在接收数据之间增加了延迟。

有类似经验的人吗?

0 个答案:

没有答案