Optionally enable websocket compression

This commit is contained in:
PrivateGER 2025-02-25 22:07:59 +01:00
parent c6cabb8c75
commit 2b919c4eb0
No known key found for this signature in database
3 changed files with 14 additions and 0 deletions

View file

@ -421,3 +421,7 @@ checkActivityPubGetSignature: false
# How long to save each log entry before deleting it. # How long to save each log entry before deleting it.
# Default: 2592000000 (1 week) # Default: 2592000000 (1 week)
#maxAge: 2592000000 #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

View file

@ -136,6 +136,8 @@ type Source = {
preSave?: boolean; preSave?: boolean;
maxAge?: number; maxAge?: number;
}; };
websocketCompression?: boolean;
}; };
export type Config = { export type Config = {
@ -252,6 +254,8 @@ export type Config = {
preSave: boolean; preSave: boolean;
maxAge: number; maxAge: number;
}; };
websocketCompression?: boolean;
}; };
export type FulltextSearchProvider = 'sqlLike' | 'sqlPgroonga' | 'meilisearch' | 'sqlTsvector'; export type FulltextSearchProvider = 'sqlLike' | 'sqlPgroonga' | 'meilisearch' | 'sqlTsvector';
@ -400,6 +404,7 @@ export function loadConfig(): Config {
preSave: config.activityLogging?.preSave ?? false, preSave: config.activityLogging?.preSave ?? false,
maxAge: config.activityLogging?.maxAge ?? (1000 * 60 * 60 * 24 * 30), maxAge: config.activityLogging?.maxAge ?? (1000 * 60 * 60 * 24 * 30),
}, },
websocketCompression: config.websocketCompression,
}; };
} }

View file

@ -26,6 +26,7 @@ import MainStreamConnection from './stream/Connection.js';
import { ChannelsService } from './stream/ChannelsService.js'; import { ChannelsService } from './stream/ChannelsService.js';
import type * as http from 'node:http'; import type * as http from 'node:http';
import type { IEndpointMeta } from './endpoints.js'; import type { IEndpointMeta } from './endpoints.js';
import type {Config} from "@/config.js";
@Injectable() @Injectable()
export class StreamingApiServerService { export class StreamingApiServerService {
@ -49,6 +50,9 @@ export class StreamingApiServerService {
private channelFollowingService: ChannelFollowingService, private channelFollowingService: ChannelFollowingService,
private rateLimiterService: SkRateLimiterService, private rateLimiterService: SkRateLimiterService,
private loggerService: LoggerService, private loggerService: LoggerService,
@Inject(DI.config)
private config: Config,
) { ) {
} }
@ -74,6 +78,7 @@ export class StreamingApiServerService {
public attach(server: http.Server): void { public attach(server: http.Server): void {
this.#wss = new WebSocket.WebSocketServer({ this.#wss = new WebSocket.WebSocketServer({
noServer: true, noServer: true,
perMessageDeflate: this.config.websocketCompression ?? false,
}); });
server.on('upgrade', async (request, socket, head) => { server.on('upgrade', async (request, socket, head) => {