2016-12-13 12 views
1

현재 websocket을 통해 Meteor 서버로 메시지를 보내는 C 응용 프로그램을 만들고 있습니다. JSON 변환에 jansson을 사용하고 websocket 라이브러리에 nopoll을 사용하고 있습니다.websocket 오류로 인한 DDP 메시지

매우 큰 메시지 (약 15 000 000 자)를 보내려고 할 때를 제외하고 모든 것이 양방향 (송신/수신)에서 잘 작동합니다. 나는 메시지가 서버로 전송되어 nopoll 라이브러리가 문제의 소스가되어서는 안된다고 생각한다. 그러나 메소드 (RPC)가 호출되지 않기 때문에 메시지가 Meteor에 의해 처리되지 않는다고 확신합니다.

websocket 제한이 64 비트 부호없는 값의 최대 값과 동일하므로 문제가되지 않습니다.

한편, DDP specification에서도 DDP 메시지의 최대 길이를 찾지 못했습니다.

내가 생각하지 못했던 DDP 제한 또는 기타 매개 변수에 대해 알고 싶습니까?

+0

15M 패킷을 하위 패킷으로 분할하려고 했습니까? – LPs

+0

데이터를 분할하고 싶지 않지만 선택의 여지가 없다면이 작업을 수행 할 것입니다. 서브 패킷에 있어야하는 최대 가중치에 대한 아이디어가 있습니까? –

+0

나는 데이터베이스에 그런 큰 슬랩을 두는 것에 대해 생각할 것이다. (단지 하나의 거대한 문서가 아니라, 거기서 문제를 옮길 것이다.) 그리고 나서 DDP를 사용하여 짧은 메시지를 보내 다른쪽에 데이터가 있음을 알린다. 선물. – Mikkel

답변

-1

클라이언트와 서버가 같은 시스템에있는 아키텍처에서 작업하면서 네트워크에 제한되지 않았습니다. 너무 많은 정보를 너무 빨리 보내고 있다고 생각합니다. 소켓은 단순히 데이터로 가득차 있습니다.

해결책은 간단합니다. LP가 제안하고 흐름 제어를 구현할 때 여러 단편으로 데이터를 잘라냅니다.

또한 나는 Mikkel이 제안한대로 데이터를 데이터베이스에 직접 푸시 할 수 있어야하므로 Mongo C driver이라는 또 다른 해결책을 발견했습니다.

감사합니다.

+0

슬프게도 ** 실수 **입니다. 이 제한은 특정한 구현을 말하며 ~ [64 비트 메시지 길이 필드] (https://tools.ietf.org/html/rfc6455#section-5.2)를 허용하는 웹 소켓 프로토콜이 아닙니다. 또한,이 프로토콜은 "패킷"의 조각화 ([facilio] (http://facil.io)와 Node.js에 의해 구현 됨)를 지원하며 기본적으로 무제한 메시지 크기를 허용합니다. 당신은 아마 메모리가 부족합니다). 답을 수정하거나 삭제하십시오. – Myst

+0

P. 가능한 한 빨리 답변을 삭제하겠습니다 (일단 답변이 업데이트되면). 이 스레드를 읽는 사람에게는 정보가 올바르지 않다고 지적하는 것 밖에 없습니다. – Myst