mirror of
https://github.com/spacebarchat/server.git
synced 2024-11-11 13:14:06 +01:00
⚡ zlib compression
This commit is contained in:
parent
ccfa61ca63
commit
e4115d13ef
@ -5,6 +5,7 @@ import { Message } from "./Message";
|
||||
import { setHeartbeat } from "../util/setHeartbeat";
|
||||
import { Send } from "../util/Send";
|
||||
import { CLOSECODES, OPCODES } from "../util/Constants";
|
||||
import { createDeflate } from "zlib";
|
||||
|
||||
// TODO: check rate limit
|
||||
// TODO: specify rate limit in config
|
||||
@ -24,8 +25,14 @@ export async function Connection(this: Server, socket: WebSocket, request: Incom
|
||||
if (socket.version != 8) return socket.close(CLOSECODES.Invalid_API_version);
|
||||
|
||||
// @ts-ignore
|
||||
socket.compression = searchParams.get("compress") || "";
|
||||
// TODO: compression
|
||||
socket.compress = searchParams.get("compress") || "";
|
||||
if (socket.compress) {
|
||||
if (socket.compress !== "zlib-stream") return socket.close(CLOSECODES.Decode_error);
|
||||
socket.deflate = createDeflate({ chunkSize: 65535 });
|
||||
socket.deflate.on("data", (chunk) => socket.send(chunk));
|
||||
}
|
||||
|
||||
socket.sequence = 0;
|
||||
|
||||
setHeartbeat(socket);
|
||||
|
||||
|
@ -1,6 +1,7 @@
|
||||
import erlpack from "erlpack";
|
||||
import { promisify } from "util";
|
||||
import { Payload } from "../util/Constants";
|
||||
import { deflateSync } from "zlib";
|
||||
|
||||
import WebSocket from "./WebSocket";
|
||||
|
||||
@ -11,6 +12,11 @@ export async function Send(socket: WebSocket, data: Payload) {
|
||||
else if (socket.encoding === "json") buffer = JSON.stringify(data);
|
||||
|
||||
// TODO: compression
|
||||
if (socket.deflate) {
|
||||
socket.deflate.write(buffer);
|
||||
socket.deflate.flush();
|
||||
return;
|
||||
}
|
||||
|
||||
return new Promise((res, rej) => {
|
||||
socket.send(buffer, (err) => {
|
||||
|
@ -1,14 +1,17 @@
|
||||
import { Intents } from "fosscord-server-util";
|
||||
import WS, { Server, Data } from "ws";
|
||||
import { Deflate } from "zlib";
|
||||
|
||||
interface WebSocket extends WS {
|
||||
version: number;
|
||||
user_id: bigint;
|
||||
encoding: "etf" | "json";
|
||||
compress?: "zlib-stream";
|
||||
deflate?: Deflate;
|
||||
heartbeatTimeout: NodeJS.Timeout;
|
||||
readyTimeout: NodeJS.Timeout;
|
||||
intents: Intents;
|
||||
sequence: number;
|
||||
}
|
||||
|
||||
export default WebSocket;
|
||||
|
Loading…
Reference in New Issue
Block a user