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:
committed by
Facebook GitHub Bot
parent
accef856fc
commit
3ef1923b29
@@ -35,6 +35,10 @@ export interface ConnectionCtx {
|
|||||||
request: IncomingMessage;
|
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'
|
* It serves as a base class for WebSocket based servers. It delegates the 'connection'
|
||||||
* event to subclasses as a customisation point.
|
* event to subclasses as a customisation point.
|
||||||
@@ -52,6 +56,7 @@ class ServerWebSocket extends ServerAdapter {
|
|||||||
const wsServer = new WSServer({
|
const wsServer = new WSServer({
|
||||||
server,
|
server,
|
||||||
verifyClient: this.verifyClient(),
|
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
|
// We do not need to listen to http server's `error` because it is propagated to WS
|
||||||
|
|||||||
@@ -26,3 +26,5 @@ export function getGatekeepers(username: string): Record<string, boolean> {
|
|||||||
}
|
}
|
||||||
return GKImplementation.allGKs();
|
return GKImplementation.allGKs();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export {WEBSOCKET_MAX_MESSAGE_SIZE} from './comms/ServerWebSocket';
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ import http from 'http';
|
|||||||
import path from 'path';
|
import path from 'path';
|
||||||
import fs from 'fs-extra';
|
import fs from 'fs-extra';
|
||||||
import socketio from 'socket.io';
|
import socketio from 'socket.io';
|
||||||
|
import {WEBSOCKET_MAX_MESSAGE_SIZE} from 'flipper-server-core';
|
||||||
|
|
||||||
type Config = {
|
type Config = {
|
||||||
port: number;
|
port: number;
|
||||||
@@ -61,6 +62,8 @@ function startAssetServer(
|
|||||||
}
|
}
|
||||||
|
|
||||||
function addWebsocket(server: http.Server) {
|
function addWebsocket(server: http.Server) {
|
||||||
const io = new socketio.Server(server);
|
const io = new socketio.Server(server, {
|
||||||
|
maxHttpBufferSize: WEBSOCKET_MAX_MESSAGE_SIZE,
|
||||||
|
});
|
||||||
return io;
|
return io;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -138,7 +138,10 @@ function launchServer() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async function restartServer() {
|
async function restartServer() {
|
||||||
proc?.kill(9);
|
if (proc) {
|
||||||
|
proc.kill(9);
|
||||||
|
await sleep(1000);
|
||||||
|
}
|
||||||
try {
|
try {
|
||||||
await compileServerMain();
|
await compileServerMain();
|
||||||
await launchServer();
|
await launchServer();
|
||||||
@@ -196,10 +199,13 @@ async function startWatchChanges() {
|
|||||||
await restartServer();
|
await restartServer();
|
||||||
|
|
||||||
if (argv.open) {
|
if (argv.open) {
|
||||||
setTimeout(() => {
|
await sleep(2000);
|
||||||
// TODO: make port configurable together with flipper-server
|
// TODO: make port configurable together with flipper-server
|
||||||
open('http://localhost:52342/index.web.dev.html');
|
open('http://localhost:52342/index.web.dev.html');
|
||||||
}, 2000);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})();
|
})();
|
||||||
|
|
||||||
|
function sleep(ms: number) {
|
||||||
|
return new Promise((r) => setTimeout(r, ms));
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user