mirror of
https://github.com/spacebarchat/server.git
synced 2024-09-22 10:41:34 +02: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 { setHeartbeat } from "../util/setHeartbeat";
|
||||||
import { Send } from "../util/Send";
|
import { Send } from "../util/Send";
|
||||||
import { CLOSECODES, OPCODES } from "../util/Constants";
|
import { CLOSECODES, OPCODES } from "../util/Constants";
|
||||||
|
import { createDeflate } from "zlib";
|
||||||
|
|
||||||
// TODO: check rate limit
|
// TODO: check rate limit
|
||||||
// TODO: specify rate limit in config
|
// 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);
|
if (socket.version != 8) return socket.close(CLOSECODES.Invalid_API_version);
|
||||||
|
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
socket.compression = searchParams.get("compress") || "";
|
socket.compress = searchParams.get("compress") || "";
|
||||||
// TODO: compression
|
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);
|
setHeartbeat(socket);
|
||||||
|
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
import erlpack from "erlpack";
|
import erlpack from "erlpack";
|
||||||
import { promisify } from "util";
|
import { promisify } from "util";
|
||||||
import { Payload } from "../util/Constants";
|
import { Payload } from "../util/Constants";
|
||||||
|
import { deflateSync } from "zlib";
|
||||||
|
|
||||||
import WebSocket from "./WebSocket";
|
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);
|
else if (socket.encoding === "json") buffer = JSON.stringify(data);
|
||||||
|
|
||||||
// TODO: compression
|
// TODO: compression
|
||||||
|
if (socket.deflate) {
|
||||||
|
socket.deflate.write(buffer);
|
||||||
|
socket.deflate.flush();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
return new Promise((res, rej) => {
|
return new Promise((res, rej) => {
|
||||||
socket.send(buffer, (err) => {
|
socket.send(buffer, (err) => {
|
||||||
|
@ -1,14 +1,17 @@
|
|||||||
import { Intents } from "fosscord-server-util";
|
import { Intents } from "fosscord-server-util";
|
||||||
import WS, { Server, Data } from "ws";
|
import WS, { Server, Data } from "ws";
|
||||||
|
import { Deflate } from "zlib";
|
||||||
|
|
||||||
interface WebSocket extends WS {
|
interface WebSocket extends WS {
|
||||||
version: number;
|
version: number;
|
||||||
user_id: bigint;
|
user_id: bigint;
|
||||||
encoding: "etf" | "json";
|
encoding: "etf" | "json";
|
||||||
compress?: "zlib-stream";
|
compress?: "zlib-stream";
|
||||||
|
deflate?: Deflate;
|
||||||
heartbeatTimeout: NodeJS.Timeout;
|
heartbeatTimeout: NodeJS.Timeout;
|
||||||
readyTimeout: NodeJS.Timeout;
|
readyTimeout: NodeJS.Timeout;
|
||||||
intents: Intents;
|
intents: Intents;
|
||||||
|
sequence: number;
|
||||||
}
|
}
|
||||||
|
|
||||||
export default WebSocket;
|
export default WebSocket;
|
||||||
|
Loading…
Reference in New Issue
Block a user