Skip to content

Commit d961010

Browse files
committed
Optimize memory usage - WebSocket object as peer
1 parent 14c5282 commit d961010

3 files changed

Lines changed: 19 additions & 25 deletions

File tree

lib/fast-tracker.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,7 @@ export class FastTracker implements Tracker {
129129
info_hash: infoHash,
130130
complete: swarm.completedCount,
131131
incomplete: swarm.peers.size - swarm.completedCount,
132-
});
132+
}, peer);
133133

134134
this.sendOffersToPeers(json, swarmPeers, peer, infoHash);
135135
}
@@ -238,7 +238,7 @@ export class FastTracker implements Tracker {
238238
}
239239

240240
delete json.to_peer_id;
241-
toPeer.sendMessage(json);
241+
toPeer.sendMessage(json, toPeer);
242242

243243
if (debugEnabled) {
244244
debug("answer: from peer", Buffer.from(peer.id!).toString("hex"), "to peer", Buffer.from(toPeerId).toString("hex"));
@@ -325,7 +325,7 @@ export class FastTracker implements Tracker {
325325
peer.sendMessage({
326326
action: "scrape",
327327
files: files,
328-
});
328+
}, peer);
329329
}
330330
}
331331

@@ -394,7 +394,7 @@ function sendOffer(offerItem: {offer?: { sdp?: string }, offer_id?: string } | n
394394
type: "offer",
395395
sdp: offer.sdp, // offer.sdp is not validated to be a string
396396
},
397-
});
397+
}, toPeer);
398398
}
399399

400400
function removePeerFromSwarm(peer: InternalPeerContext, infoHash: string): Swarm | undefined {

lib/tracker.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616

1717
export interface PeerContext {
1818
id?: string;
19-
sendMessage: (json: any) => void;
19+
sendMessage: (json: any, peer: PeerContext) => void;
2020
}
2121

2222
export interface Tracker {

lib/uws-tracker.ts

Lines changed: 14 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
*/
1616

1717
import { App, SSLApp, WebSocket, HttpRequest, TemplatedApp } from "uWebSockets.js";
18-
import { Tracker, PeerContext, TrackerError } from "./tracker";
18+
import { Tracker, TrackerError } from "./tracker";
1919
import { StringDecoder } from "string_decoder";
2020

2121
import * as Debug from "debug";
@@ -104,18 +104,16 @@ export class UWebSocketsTracker {
104104
return;
105105
}
106106

107-
let peer: PeerContext | undefined = ws.peer;
108-
if (peer === undefined) {
109-
peer = createPeer(ws);
110-
ws.peer = peer;
107+
if (ws.sendMessage === undefined) {
108+
ws.sendMessage = sendMessage;
111109
}
112110

113111
if (debugMessagesEnabled) {
114-
debugMessages("in", peer.id !== undefined ? Buffer.from(peer.id).toString("hex") : "unknown peer", json);
112+
debugMessages("in", ws.id !== undefined ? Buffer.from(ws.id).toString("hex") : "unknown peer", json);
115113
}
116114

117115
try {
118-
this.tracker.processMessage(json, peer);
116+
this.tracker.processMessage(json, ws as any);
119117
} catch (e) {
120118
if (e instanceof TrackerError) {
121119
debugWebSockets("failed to process message from the peer:", e);
@@ -128,24 +126,20 @@ export class UWebSocketsTracker {
128126

129127
private onClose = (ws: WebSocket, code: number, message: ArrayBuffer) => {
130128
this.webSocketsCount--;
131-
const peer: PeerContext | undefined = ws.peer;
132129

133-
if (peer !== undefined) {
134-
delete ws.peer;
135-
this.tracker.disconnectPeer(peer);
130+
if (ws.sendMessage !== undefined) {
131+
this.tracker.disconnectPeer(ws as any);
132+
delete ws.sendMessage;
133+
delete ws.id;
136134
}
137135

138136
debugWebSockets("closed with code", code);
139137
}
140138
}
141139

142-
function createPeer(ws: WebSocket): PeerContext {
143-
return {
144-
sendMessage: (json: any) => {
145-
ws.send(JSON.stringify(json), false, false);
146-
if (debugMessagesEnabled) {
147-
debugMessages("out", ws.peer.id !== undefined ? Buffer.from(ws.peer.id).toString("hex") : "unknown peer", json);
148-
}
149-
},
150-
};
140+
function sendMessage(json: any, ws: WebSocket) {
141+
ws.send(JSON.stringify(json), false, false);
142+
if (debugMessagesEnabled) {
143+
debugMessages("out", ws.id !== undefined ? Buffer.from(ws.id).toString("hex") : "unknown peer", json);
144+
}
151145
}

0 commit comments

Comments
 (0)