Use uniform Socket message size to avoid disconnects

Summary: During startup the socket connection would close a few times, among others because Scribe dumps 1.3 MB of data after startup, and the maximum payload of `socket.io` defaults to 1MB. This diff changes it to 100MB (the max size used by `ws` library). We know that we need at least > 10 MB, as that is what plugins like Network cap at.

Reviewed By: aigoncharov

Differential Revision: D33017653

fbshipit-source-id: 1233af6fbdc4b9eed42786ee418cfd6d43b2b433
This commit is contained in:
Michel Weststrate
2021-12-13 05:46:42 -08:00
committed by Facebook GitHub Bot
parent accef856fc
commit 3ef1923b29
4 changed files with 22 additions and 6 deletions

View File

@@ -35,6 +35,10 @@ export interface ConnectionCtx {
request: IncomingMessage;
}
// based on https://github.com/websockets/ws/blob/master/lib/websocket-server.js#L40,
// exposed to share with socket.io defaults
export const WEBSOCKET_MAX_MESSAGE_SIZE = 100 * 1024 * 1024;
/**
* It serves as a base class for WebSocket based servers. It delegates the 'connection'
* event to subclasses as a customisation point.
@@ -52,6 +56,7 @@ class ServerWebSocket extends ServerAdapter {
const wsServer = new WSServer({
server,
verifyClient: this.verifyClient(),
maxPayload: WEBSOCKET_MAX_MESSAGE_SIZE,
});
// We do not need to listen to http server's `error` because it is propagated to WS

View File

@@ -26,3 +26,5 @@ export function getGatekeepers(username: string): Record<string, boolean> {
}
return GKImplementation.allGKs();
}
export {WEBSOCKET_MAX_MESSAGE_SIZE} from './comms/ServerWebSocket';

View File

@@ -12,6 +12,7 @@ import http from 'http';
import path from 'path';
import fs from 'fs-extra';
import socketio from 'socket.io';
import {WEBSOCKET_MAX_MESSAGE_SIZE} from 'flipper-server-core';
type Config = {
port: number;
@@ -61,6 +62,8 @@ function startAssetServer(
}
function addWebsocket(server: http.Server) {
const io = new socketio.Server(server);
const io = new socketio.Server(server, {
maxHttpBufferSize: WEBSOCKET_MAX_MESSAGE_SIZE,
});
return io;
}

View File

@@ -138,7 +138,10 @@ function launchServer() {
}
async function restartServer() {
proc?.kill(9);
if (proc) {
proc.kill(9);
await sleep(1000);
}
try {
await compileServerMain();
await launchServer();
@@ -196,10 +199,13 @@ async function startWatchChanges() {
await restartServer();
if (argv.open) {
setTimeout(() => {
await sleep(2000);
// TODO: make port configurable together with flipper-server
open('http://localhost:52342/index.web.dev.html');
}, 2000);
}
}
})();
function sleep(ms: number) {
return new Promise((r) => setTimeout(r, ms));
}