scaling: include padId in socketio query string

pull/4974/head
John McLear 2021-03-24 16:07:11 +00:00 committed by GitHub
parent 0e854a5892
commit 2b98b930d7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 10 additions and 2 deletions

View File

@ -218,7 +218,14 @@ const sendClientReady = (isReconnect, messageType) => {
};
const handshake = () => {
let padId = document.location.pathname.substring(document.location.pathname.lastIndexOf('/') + 1);
// unescape neccesary due to Safari and Opera interpretation of spaces
padId = decodeURIComponent(padId);
// padId is used here for sharding / scaling. We prefix the padId with padId: so it's clear
// to the proxy/gateway/whatever that this is a pad connection and should be treated as such
socket = pad.socket = socketio.connect(exports.baseURL, '/', {
query: {padId},
reconnectionAttempts: 5,
reconnection: true,
reconnectionDelay: 1000,

View File

@ -52,7 +52,7 @@ const init = () => {
Cookies.set('token', token, {expires: 60});
}
socket = socketio.connect(exports.baseURL);
socket = socketio.connect(exports.baseURL, '/', {query: {padId}});
// send the ready message once we're connected
socket.on('connect', () => {

View File

@ -52,12 +52,13 @@ const connect = async (res) => {
([name, cookie]) => `${name}=${encodeURIComponent(cookie.value)}`).join('; ');
logger.debug('socket.io connecting...');
const padId = res.req.path.split('/p/')[1];
const socket = io(`${common.baseUrl}/`, {
forceNew: true, // Different tests will have different query parameters.
path: '/socket.io',
// socketio.js-client on node.js doesn't support cookies (see https://git.io/JU8u9), so the
// express_sid cookie must be passed as a query parameter.
query: {cookie: reqCookieHdr},
query: {cookie: reqCookieHdr, padId},
});
try {
await getSocketEvent(socket, 'connect');