mirror of
https://github.com/hcengineering/platform.git
synced 2025-04-12 19:30:52 +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 { type Token } from '@hcengineering/server-token'
|
||||
import { type ClientSessionCtx, type Session, type SessionRequest, type StatisticsElement } from './types'
|
||||
import { RPCHandler } from '@hcengineering/rpc'
|
||||
|
||||
/**
|
||||
* @public
|
||||
*/
|
||||
export class ClientSession implements Session {
|
||||
handler = new RPCHandler()
|
||||
createTime = Date.now()
|
||||
requests = new Map<string, SessionRequest>()
|
||||
binaryMode: boolean = false
|
||||
|
@ -66,6 +66,8 @@ export function startHttpServer (
|
||||
})
|
||||
}
|
||||
|
||||
const rpcHandler = new RPCHandler()
|
||||
|
||||
const app = express()
|
||||
app.use(cors())
|
||||
app.use(
|
||||
@ -242,7 +244,6 @@ export function startHttpServer (
|
||||
})
|
||||
|
||||
const httpServer = http.createServer(app)
|
||||
|
||||
const wss = new WebSocketServer({
|
||||
noServer: true,
|
||||
perMessageDeflate: enableCompression
|
||||
@ -283,7 +284,8 @@ export function startHttpServer (
|
||||
language: request.headers['accept-language'] ?? '',
|
||||
email: token.email,
|
||||
mode: token.extra?.mode,
|
||||
model: token.extra?.model
|
||||
model: token.extra?.model,
|
||||
rpcHandler
|
||||
}
|
||||
const cs: ConnectionSocket = createWebsocketClientSocket(ws, data)
|
||||
|
||||
@ -385,19 +387,18 @@ export function startHttpServer (
|
||||
if (LOGGING_ENABLED) {
|
||||
ctx.error('invalid token', err)
|
||||
}
|
||||
const handler = new RPCHandler()
|
||||
wss.handleUpgrade(request, socket, head, (ws) => {
|
||||
const resp: Response<any> = {
|
||||
id: -1,
|
||||
error: UNAUTHORIZED,
|
||||
result: 'hello'
|
||||
}
|
||||
ws.send(handler.serialize(resp, false), { binary: false })
|
||||
ws.send(rpcHandler.serialize(resp, false), { binary: false })
|
||||
ws.onmessage = (msg) => {
|
||||
const resp: Response<any> = {
|
||||
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 (
|
||||
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 {
|
||||
const handler = new RPCHandler()
|
||||
const cs: ConnectionSocket = {
|
||||
id: generateId(),
|
||||
isClosed: false,
|
||||
@ -442,12 +450,12 @@ function createWebsocketClientSocket (
|
||||
ws.close()
|
||||
},
|
||||
readRequest: (buffer: Buffer, binary: boolean) => {
|
||||
return handler.readRequest(buffer, binary)
|
||||
return data.rpcHandler.readRequest(buffer, binary)
|
||||
},
|
||||
data: () => data,
|
||||
send: async (ctx: MeasureContext, msg, binary, compression) => {
|
||||
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('send-data', smsg.length)
|
||||
|
@ -61,6 +61,8 @@ export function startUWebsocketServer (
|
||||
|
||||
const uAPP = uWebSockets.App()
|
||||
|
||||
const rpcHandler = new RPCHandler()
|
||||
|
||||
const writeStatus = (response: HttpResponse, status: string): HttpResponse => {
|
||||
return response
|
||||
.writeStatus(status)
|
||||
@ -124,7 +126,8 @@ export function startUWebsocketServer (
|
||||
language: '',
|
||||
email: data.payload.email,
|
||||
mode: data.payload.extra?.mode,
|
||||
model: data.payload.extra?.model
|
||||
model: data.payload.extra?.model,
|
||||
rpcHandler
|
||||
}
|
||||
const cs = createWebSocketClientSocket(wrData, ws, data)
|
||||
data.connectionSocket = cs
|
||||
@ -370,11 +373,18 @@ export function startUWebsocketServer (
|
||||
}
|
||||
}
|
||||
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>,
|
||||
data: WebsocketUserData
|
||||
): ConnectionSocket {
|
||||
const handler = new RPCHandler()
|
||||
const cs: ConnectionSocket = {
|
||||
id: generateId(),
|
||||
isClosed: false,
|
||||
@ -388,13 +398,13 @@ function createWebSocketClientSocket (
|
||||
}
|
||||
},
|
||||
readRequest: (buffer: Buffer, binary: boolean) => {
|
||||
return handler.readRequest(buffer, binary)
|
||||
return wrData.rpcHandler.readRequest(buffer, binary)
|
||||
},
|
||||
send: async (ctx, msg, binary, compression): Promise<number> => {
|
||||
if (data.backPressure !== undefined) {
|
||||
await data.backPressure
|
||||
}
|
||||
const serialized = handler.serialize(msg, binary)
|
||||
const serialized = wrData.rpcHandler.serialize(msg, binary)
|
||||
try {
|
||||
const sendR = ws.send(serialized, binary, compression)
|
||||
if (sendR === 2) {
|
||||
|
Loading…
Reference in New Issue
Block a user