summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPrivateGER <privateger@privateger.me>2025-02-25 22:07:59 +0100
committerPrivateGER <privateger@privateger.me>2025-02-25 22:07:59 +0100
commit2b919c4eb0dddd668a7f541122d54f191a0872c3 (patch)
tree204b567faf09c5204880e40aed61a29d344e6252
parentmerge: Fix file description labels to use "alt text" terminology (!911) (diff)
downloadsharkey-2b919c4eb0dddd668a7f541122d54f191a0872c3.tar.gz
sharkey-2b919c4eb0dddd668a7f541122d54f191a0872c3.tar.bz2
sharkey-2b919c4eb0dddd668a7f541122d54f191a0872c3.zip
Optionally enable websocket compression
-rw-r--r--.config/example.yml4
-rw-r--r--packages/backend/src/config.ts5
-rw-r--r--packages/backend/src/server/api/StreamingApiServerService.ts5
3 files changed, 14 insertions, 0 deletions
diff --git a/.config/example.yml b/.config/example.yml
index d199544589..1caaf87eab 100644
--- a/.config/example.yml
+++ b/.config/example.yml
@@ -421,3 +421,7 @@ checkActivityPubGetSignature: false
# How long to save each log entry before deleting it.
# Default: 2592000000 (1 week)
#maxAge: 2592000000
+
+# Transparently compress every websocket message on clients that support it.
+# Trades server CPU usage for reduced bandwidth usage and a faster frontend on the client.
+websocketCompression: false
diff --git a/packages/backend/src/config.ts b/packages/backend/src/config.ts
index c571c227a1..b09a144a4f 100644
--- a/packages/backend/src/config.ts
+++ b/packages/backend/src/config.ts
@@ -136,6 +136,8 @@ type Source = {
preSave?: boolean;
maxAge?: number;
};
+
+ websocketCompression?: boolean;
};
export type Config = {
@@ -252,6 +254,8 @@ export type Config = {
preSave: boolean;
maxAge: number;
};
+
+ websocketCompression?: boolean;
};
export type FulltextSearchProvider = 'sqlLike' | 'sqlPgroonga' | 'meilisearch' | 'sqlTsvector';
@@ -400,6 +404,7 @@ export function loadConfig(): Config {
preSave: config.activityLogging?.preSave ?? false,
maxAge: config.activityLogging?.maxAge ?? (1000 * 60 * 60 * 24 * 30),
},
+ websocketCompression: config.websocketCompression,
};
}
diff --git a/packages/backend/src/server/api/StreamingApiServerService.ts b/packages/backend/src/server/api/StreamingApiServerService.ts
index 6e7abcfae6..4eb11f2956 100644
--- a/packages/backend/src/server/api/StreamingApiServerService.ts
+++ b/packages/backend/src/server/api/StreamingApiServerService.ts
@@ -26,6 +26,7 @@ import MainStreamConnection from './stream/Connection.js';
import { ChannelsService } from './stream/ChannelsService.js';
import type * as http from 'node:http';
import type { IEndpointMeta } from './endpoints.js';
+import type {Config} from "@/config.js";
@Injectable()
export class StreamingApiServerService {
@@ -49,6 +50,9 @@ export class StreamingApiServerService {
private channelFollowingService: ChannelFollowingService,
private rateLimiterService: SkRateLimiterService,
private loggerService: LoggerService,
+
+ @Inject(DI.config)
+ private config: Config,
) {
}
@@ -74,6 +78,7 @@ export class StreamingApiServerService {
public attach(server: http.Server): void {
this.#wss = new WebSocket.WebSocketServer({
noServer: true,
+ perMessageDeflate: this.config.websocketCompression ?? false,
});
server.on('upgrade', async (request, socket, head) => {