programing

웹 소켓 프레임 크기 제한

javamemo 2023. 3. 1. 08:47
반응형

웹 소켓 프레임 크기 제한

엄청난 양의 JSON 데이터를 웹소켓을 통해 보내고 있습니다.JSON에는 1000을 넘는 엔트리가 있을 수 있습니다.프레임 크기 제한으로 인해 Websocket 프로토콜은 JSON을 프레임으로 자동 분할하므로 어쩔 수 없습니다.웹소켓의 프레임 사이즈는 변경할 수 없기 때문입니다.

문제:

JSON을 평가하려고 할 때JSON.parse프레임이 완전한 JSON 오브젝트가 아니기 때문에 명백한 해석 오류가 발생합니다.이 모든 것은 웹 소켓에서 이루어집니다.onmessage이벤트 콜백어떻게 하면 큰 JSON을 다른 프레임으로 받아도 해석할 수 있을까요?나는 프레임의 합성을 시도했다.onmessage아직 에러가 발생.

사이드 질문:

파손된 JSON을 적절히 조정하려면 어떻게 해야 합니까?

RFC 6455 베이스 프레임에 따라 단일 WebSocket 프레임의 최대 크기 제한은 2^63바이트(9,223,372,036,854,775,807바이트~=9.22엑사바이트)입니다(@Sebastian 의한 수정).

그러나 하나 이상의 프레임으로 구성된 WebSocket 메시지는 프로토콜 수준에서 제한되지 않습니다.

Web Socket 의 실장 마다, 메시지와 프레임의 제한은 다릅니다.예를 들어 메시지 전체의 최대 메시지 크기 설정(보통 메모리 사용량)이나 대용량 메시지에 대한 스트리밍 옵션을 제공하여 메모리를 보다 효율적으로 사용할 수 있도록 합니다.

단, 선택한 WebSocket 구현에서 오류가 발생하여 JSON 메시지를 여러 프레임이 아닌 여러 메시지로 부적절하게 분할할 수 있습니다.Chrome의 네트워크 검사 도구 또는 Wireshark와 같은 외부 도구를 사용하여 이 동작을 확인할 수 있습니다.

var wsServer = new websocket.server({
            httpServer: server,
            maxReceivedFrameSize: 131072,
            maxReceivedMessageSize: 10 * 1024 * 1024,
            autoAcceptConnections: false
        });

기본 max Frame Size & Message Size 변경

하위 수준인 WS를 다루고 있으므로 여러 WS 프레임을 통해 전송되는 데이터를 처리하는 응용 프로그램 프로토콜을 생성해야 합니다.각 WS 프레임에 있는 데이터를 연결하는 것은 사용자에게 달려 있습니다(btw, 프레임을 연결하지 마십시오).각 프레임의 데이터를 합산합니다).

기본적으로 파일 전송 프로토콜을 재창조하는 것입니다.

언급URL : https://stackoverflow.com/questions/20652194/websocket-frame-size-limitation

반응형