我使用原生的“ 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服务器似乎总是在接收数据之间增加了延迟。
有类似经验的人吗?