mirror of
https://github.com/hcengineering/platform.git
synced 2025-04-21 07:46:24 +00:00
UBERF-7543: Fix memory usage (#6044)
Signed-off-by: Andrey Sobolev <haiodo@gmail.com>
This commit is contained in:
parent
f815d1e4f5
commit
a4f338d43a
@ -37,13 +37,10 @@ import core, {
|
|||||||
import { SessionContextImpl, createBroadcastEvent, type Pipeline } from '@hcengineering/server-core'
|
import { SessionContextImpl, createBroadcastEvent, type Pipeline } from '@hcengineering/server-core'
|
||||||
import { type Token } from '@hcengineering/server-token'
|
import { type Token } from '@hcengineering/server-token'
|
||||||
import { type ClientSessionCtx, type Session, type SessionRequest, type StatisticsElement } from './types'
|
import { type ClientSessionCtx, type Session, type SessionRequest, type StatisticsElement } from './types'
|
||||||
import { RPCHandler } from '@hcengineering/rpc'
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @public
|
* @public
|
||||||
*/
|
*/
|
||||||
export class ClientSession implements Session {
|
export class ClientSession implements Session {
|
||||||
handler = new RPCHandler()
|
|
||||||
createTime = Date.now()
|
createTime = Date.now()
|
||||||
requests = new Map<string, SessionRequest>()
|
requests = new Map<string, SessionRequest>()
|
||||||
binaryMode: boolean = false
|
binaryMode: boolean = false
|
||||||
|
@ -66,6 +66,8 @@ export function startHttpServer (
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const rpcHandler = new RPCHandler()
|
||||||
|
|
||||||
const app = express()
|
const app = express()
|
||||||
app.use(cors())
|
app.use(cors())
|
||||||
app.use(
|
app.use(
|
||||||
@ -242,7 +244,6 @@ export function startHttpServer (
|
|||||||
})
|
})
|
||||||
|
|
||||||
const httpServer = http.createServer(app)
|
const httpServer = http.createServer(app)
|
||||||
|
|
||||||
const wss = new WebSocketServer({
|
const wss = new WebSocketServer({
|
||||||
noServer: true,
|
noServer: true,
|
||||||
perMessageDeflate: enableCompression
|
perMessageDeflate: enableCompression
|
||||||
@ -283,7 +284,8 @@ export function startHttpServer (
|
|||||||
language: request.headers['accept-language'] ?? '',
|
language: request.headers['accept-language'] ?? '',
|
||||||
email: token.email,
|
email: token.email,
|
||||||
mode: token.extra?.mode,
|
mode: token.extra?.mode,
|
||||||
model: token.extra?.model
|
model: token.extra?.model,
|
||||||
|
rpcHandler
|
||||||
}
|
}
|
||||||
const cs: ConnectionSocket = createWebsocketClientSocket(ws, data)
|
const cs: ConnectionSocket = createWebsocketClientSocket(ws, data)
|
||||||
|
|
||||||
@ -385,19 +387,18 @@ export function startHttpServer (
|
|||||||
if (LOGGING_ENABLED) {
|
if (LOGGING_ENABLED) {
|
||||||
ctx.error('invalid token', err)
|
ctx.error('invalid token', err)
|
||||||
}
|
}
|
||||||
const handler = new RPCHandler()
|
|
||||||
wss.handleUpgrade(request, socket, head, (ws) => {
|
wss.handleUpgrade(request, socket, head, (ws) => {
|
||||||
const resp: Response<any> = {
|
const resp: Response<any> = {
|
||||||
id: -1,
|
id: -1,
|
||||||
error: UNAUTHORIZED,
|
error: UNAUTHORIZED,
|
||||||
result: 'hello'
|
result: 'hello'
|
||||||
}
|
}
|
||||||
ws.send(handler.serialize(resp, false), { binary: false })
|
ws.send(rpcHandler.serialize(resp, false), { binary: false })
|
||||||
ws.onmessage = (msg) => {
|
ws.onmessage = (msg) => {
|
||||||
const resp: Response<any> = {
|
const resp: Response<any> = {
|
||||||
error: UNAUTHORIZED
|
error: UNAUTHORIZED
|
||||||
}
|
}
|
||||||
ws.send(handler.serialize(resp, false), { binary: false })
|
ws.send(rpcHandler.serialize(resp, false), { binary: false })
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@ -431,9 +432,16 @@ export function startHttpServer (
|
|||||||
}
|
}
|
||||||
function createWebsocketClientSocket (
|
function createWebsocketClientSocket (
|
||||||
ws: WebSocket,
|
ws: WebSocket,
|
||||||
data: { remoteAddress: string, userAgent: string, language: string, email: string, mode: any, model: any }
|
data: {
|
||||||
|
remoteAddress: string
|
||||||
|
userAgent: string
|
||||||
|
language: string
|
||||||
|
email: string
|
||||||
|
mode: any
|
||||||
|
model: any
|
||||||
|
rpcHandler: RPCHandler
|
||||||
|
}
|
||||||
): ConnectionSocket {
|
): ConnectionSocket {
|
||||||
const handler = new RPCHandler()
|
|
||||||
const cs: ConnectionSocket = {
|
const cs: ConnectionSocket = {
|
||||||
id: generateId(),
|
id: generateId(),
|
||||||
isClosed: false,
|
isClosed: false,
|
||||||
@ -442,12 +450,12 @@ function createWebsocketClientSocket (
|
|||||||
ws.close()
|
ws.close()
|
||||||
},
|
},
|
||||||
readRequest: (buffer: Buffer, binary: boolean) => {
|
readRequest: (buffer: Buffer, binary: boolean) => {
|
||||||
return handler.readRequest(buffer, binary)
|
return data.rpcHandler.readRequest(buffer, binary)
|
||||||
},
|
},
|
||||||
data: () => data,
|
data: () => data,
|
||||||
send: async (ctx: MeasureContext, msg, binary, compression) => {
|
send: async (ctx: MeasureContext, msg, binary, compression) => {
|
||||||
const sst = Date.now()
|
const sst = Date.now()
|
||||||
const smsg = handler.serialize(msg, binary)
|
const smsg = data.rpcHandler.serialize(msg, binary)
|
||||||
ctx.measure('serialize', Date.now() - sst)
|
ctx.measure('serialize', Date.now() - sst)
|
||||||
|
|
||||||
ctx.measure('send-data', smsg.length)
|
ctx.measure('send-data', smsg.length)
|
||||||
|
@ -61,6 +61,8 @@ export function startUWebsocketServer (
|
|||||||
|
|
||||||
const uAPP = uWebSockets.App()
|
const uAPP = uWebSockets.App()
|
||||||
|
|
||||||
|
const rpcHandler = new RPCHandler()
|
||||||
|
|
||||||
const writeStatus = (response: HttpResponse, status: string): HttpResponse => {
|
const writeStatus = (response: HttpResponse, status: string): HttpResponse => {
|
||||||
return response
|
return response
|
||||||
.writeStatus(status)
|
.writeStatus(status)
|
||||||
@ -124,7 +126,8 @@ export function startUWebsocketServer (
|
|||||||
language: '',
|
language: '',
|
||||||
email: data.payload.email,
|
email: data.payload.email,
|
||||||
mode: data.payload.extra?.mode,
|
mode: data.payload.extra?.mode,
|
||||||
model: data.payload.extra?.model
|
model: data.payload.extra?.model,
|
||||||
|
rpcHandler
|
||||||
}
|
}
|
||||||
const cs = createWebSocketClientSocket(wrData, ws, data)
|
const cs = createWebSocketClientSocket(wrData, ws, data)
|
||||||
data.connectionSocket = cs
|
data.connectionSocket = cs
|
||||||
@ -370,11 +373,18 @@ export function startUWebsocketServer (
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
function createWebSocketClientSocket (
|
function createWebSocketClientSocket (
|
||||||
wrData: { remoteAddress: ArrayBuffer, userAgent: string, language: string, email: string, mode: any, model: any },
|
wrData: {
|
||||||
|
remoteAddress: ArrayBuffer
|
||||||
|
userAgent: string
|
||||||
|
language: string
|
||||||
|
email: string
|
||||||
|
mode: any
|
||||||
|
model: any
|
||||||
|
rpcHandler: RPCHandler
|
||||||
|
},
|
||||||
ws: uWebSockets.WebSocket<WebsocketUserData>,
|
ws: uWebSockets.WebSocket<WebsocketUserData>,
|
||||||
data: WebsocketUserData
|
data: WebsocketUserData
|
||||||
): ConnectionSocket {
|
): ConnectionSocket {
|
||||||
const handler = new RPCHandler()
|
|
||||||
const cs: ConnectionSocket = {
|
const cs: ConnectionSocket = {
|
||||||
id: generateId(),
|
id: generateId(),
|
||||||
isClosed: false,
|
isClosed: false,
|
||||||
@ -388,13 +398,13 @@ function createWebSocketClientSocket (
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
readRequest: (buffer: Buffer, binary: boolean) => {
|
readRequest: (buffer: Buffer, binary: boolean) => {
|
||||||
return handler.readRequest(buffer, binary)
|
return wrData.rpcHandler.readRequest(buffer, binary)
|
||||||
},
|
},
|
||||||
send: async (ctx, msg, binary, compression): Promise<number> => {
|
send: async (ctx, msg, binary, compression): Promise<number> => {
|
||||||
if (data.backPressure !== undefined) {
|
if (data.backPressure !== undefined) {
|
||||||
await data.backPressure
|
await data.backPressure
|
||||||
}
|
}
|
||||||
const serialized = handler.serialize(msg, binary)
|
const serialized = wrData.rpcHandler.serialize(msg, binary)
|
||||||
try {
|
try {
|
||||||
const sendR = ws.send(serialized, binary, compression)
|
const sendR = ws.send(serialized, binary, compression)
|
||||||
if (sendR === 2) {
|
if (sendR === 2) {
|
||||||
|
Loading…
Reference in New Issue
Block a user