Simplify send buffer logic
This commit is contained in:
parent
aadce8e1a9
commit
344243db92
36
lib/net.js
36
lib/net.js
@ -57,15 +57,15 @@ var ioWatchers = new FreeList("iowatcher", 100, function () {
|
|||||||
return new IOWatcher();
|
return new IOWatcher();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
var nb = 0;
|
||||||
var buffers = new FreeList("buffer", 100, function (l) {
|
var buffers = new FreeList("buffer", 100, function (l) {
|
||||||
return new process.Buffer(1000);
|
return new process.Buffer(500);
|
||||||
});
|
});
|
||||||
|
|
||||||
// Allocated on demand.
|
// Allocated on demand.
|
||||||
var recvBuffer = null;
|
var recvBuffer = null;
|
||||||
|
|
||||||
function allocRecvBuffer () {
|
function allocRecvBuffer () {
|
||||||
recvBuffer = new process.Buffer(8*1024);
|
recvBuffer = new process.Buffer(40*1024);
|
||||||
recvBuffer.used = 0;
|
recvBuffer.used = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -192,19 +192,9 @@ Socket.prototype._sendString = function (data, encoding) {
|
|||||||
if (self.sendQueue.length == 0) {
|
if (self.sendQueue.length == 0) {
|
||||||
buffer = self._allocateSendBuffer();
|
buffer = self._allocateSendBuffer();
|
||||||
} else {
|
} else {
|
||||||
// walk through the sendQueue, find the buffer with free space
|
buffer = self._sendQueueLast();
|
||||||
for (var i = 0; i < self.sendQueue.length; i++) {
|
if (buffer.used == buffer.length) {
|
||||||
if (self.sendQueue[i].used == 0) {
|
buffer = self._allocateSendBuffer();
|
||||||
buffer = self.sendQueue[i];
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// if we didn't find one, take the last
|
|
||||||
// TODO what if this isn't empty but encoding == fd ?
|
|
||||||
if (!buffer) {
|
|
||||||
buffer = self._sendQueueLast();
|
|
||||||
// if last buffer is used up
|
|
||||||
if (buffer.length == buffer.used) buffer = self._allocateSendBuffer();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -279,17 +269,7 @@ Socket.prototype.send = function (data, encoding) {
|
|||||||
var inserted = false;
|
var inserted = false;
|
||||||
data.sent = 0;
|
data.sent = 0;
|
||||||
data.used = data.length;
|
data.used = data.length;
|
||||||
for (var i = 0; i < self.sendQueue.length; i++) {
|
|
||||||
if (self.sendQueue[i].used == 0) {
|
|
||||||
// if found, insert the data there
|
|
||||||
self.sendQueue.splice(i, 0, data);
|
|
||||||
inserted = true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!inserted) self.sendQueue.push(data);
|
if (!inserted) self.sendQueue.push(data);
|
||||||
|
|
||||||
self.sendQueueSize += data.used;
|
self.sendQueueSize += data.used;
|
||||||
}
|
}
|
||||||
return this.flush();
|
return this.flush();
|
||||||
@ -322,7 +302,7 @@ Socket.prototype.flush = function () {
|
|||||||
var self = this;
|
var self = this;
|
||||||
|
|
||||||
var bytesWritten;
|
var bytesWritten;
|
||||||
while (self.sendQueue.length > 0) {
|
while (self.sendQueue.length) {
|
||||||
if (!self.writable) throw new Error('Socket is not writable');
|
if (!self.writable) throw new Error('Socket is not writable');
|
||||||
|
|
||||||
var b = self.sendQueue[0];
|
var b = self.sendQueue[0];
|
||||||
@ -333,7 +313,7 @@ Socket.prototype.flush = function () {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (b.sent == b.used) {
|
if (b.sent == b.used) {
|
||||||
// this can be improved - save the buffer for later?
|
// shift!
|
||||||
self.sendQueue.shift();
|
self.sendQueue.shift();
|
||||||
buffers.free(b);
|
buffers.free(b);
|
||||||
continue;
|
continue;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user