一个例子是 RoBrowser 如何处理每个传入/传出数据包。
首先, RoBrowser 为每个数据包使用类,有数千个数据包,每次收到或发送时都会实例化。
数据包定义为here。我们以#L2681
为例:
// 0x204
PACKET.CA.EXE_HASHCHECK = function PACKET_CA_EXE_HASHCHECK() {
this.HashValue = '';
this.build = function() {
var pkt_len = 2 + 16;
var pkt_buf = new BinaryWriter(pkt_len);
pkt_buf.writeShort(0x204);
pkt_buf.writeBinaryString(this.HashValue, 16);
return pkt_buf;
};
};
我们可以发现正在实例化的数据包here。
pkt = new PACKET.CA.EXE_HASHCHECK();
pkt.HashValue = hash;
Network.sendPacket(pkt);
虽然这是一个只发送一次的数据包,但想象一下这是一个像Walk
或Attack
数据包那样发送数千次的数据包。
我不是编程,oop或javascript的专家,但我读了一两件事。
注意:
问题:
我正在寻找有关此主题的参考资料(数据包处理)。如果您知道,请告诉我们。
答案 0 :(得分:1)
以这种方式定义对象方法会为每个实例化对象创建新函数 - 对许多对象都不好: - (
使用prototype-way,只在原型对象上创建一个方法,由所有实例共享:
// 0x204
PACKET.CA.EXE_HASHCHECK = function PACKET_CA_EXE_HASHCHECK() {
this.HashValue = '';
};
PACKET_CA_EXE_HASHCHECK.prototype.build = function() {
var pkt_len = 2 + 16;
var pkt_buf = new BinaryWriter(pkt_len);
pkt_buf.writeShort(0x204);
pkt_buf.writeBinaryString(this.HashValue, 16);
return pkt_buf;
};