2017-01-14 25 views
0

Windows에서 CentOS로 데이터 조각을 전송하기 위해 nanomsg를 사용하고 있습니다.nn_send를 실행 한 후 nn_socket은 Req/Rep 모드에서 다음 데이터 조각을 즉시 전송하지 못하도록합니다.

현재로서는 Req/Rep 모드를 사용하고 있습니다.

CentOS는 Req 요청을 보내고 "Windows"는 Rep으로 응답합니다.

괜찮아 보인다.

하지만 응답 한 데이터 조각에는 여러 가지 구조체가 혼합되어 있습니다. 여러 데이터 프레임을 따르는 데이터 헤드.

하나씩 보내고 싶습니다.

하지만 나노 미터에 따르면 Req/Rep은 요청을 보내고 한 번에 하나씩 응답을 받아야합니다. 그게 다야.

그래서 머리를 보내면 nn_socket은 데이터 프레임을 보내지 않습니다.

내가 할 수있는 것은 커다란 버퍼를 만들고 헤드와 데이터 프레임을 시멘트로 묶어 함께 보내는 것입니다.

함께 보내는 대신 하나씩 보낼 수있는 방법이 있습니까?

감사합니다.

+0

내가 댓글을 달았, 우리는 내 상황을 해결하기 위해 nn_sendmsg를 사용할 수 있습니다 ........ – norikoSD

답변

0

Google 프로토콜 버퍼와 같은 것이 여기에 친구가됩니다.

nanomsg가 전체 메시지를 보냅니다. 그것은 단순히 "메시지"가 무엇인지에 관한 문제입니다. 본질적으로, 이는 전달하기 위해 보장되는 바이트 세트입니다. 이러한 바이트가 실제로 무엇을 나타내는지는 당신에게 달려 있습니다.

Google 프로토콜 버퍼 (또는 JSON 또는 XML 또는 ASN.1 [내 개인 즐겨 찾기] 등 선택할 수있는 다른 곳이 많습니다.)를 사용하면 필요에 따라 메시지 구조를 정의 할 수 있습니다. 그런 다음 해당 메시지를 직렬화하고 비 직렬화하는 코드를 생성합니다. 당신은 serialize/deserialise (byte 배열, 문자열, 무엇이든간에) 버퍼에 코드를 작성합니다.이 코드는 nanomsg를 사용하여 메시지로 전달됩니다.

멋진 점은 다른 컴파일러에서의 엔디안 구조, 구조체 패킹 또는 다른 끝에서 사용되는 프로그래밍 언어 나 deserialised 형식의 메시지가 연속적인지 여부에 대해 걱정할 필요가 없다는 것입니다 메모리에. 그것은 무료이기 때문에

나는

+1

을 nn_sendmsg를 사용해야 보인다 매우 간단, GPB을 언급. 그리고 괜찮아 보입니다. 그리고 저는 Google 프로토콜 버퍼에 대해 조금은 알고 있습니다. 감사합니다 ~ – norikoSD

+0

@norikoSD nn_sendmsg가 해낼 것입니다. 그러나 복잡한 구조의 계층 구조를 가지고 있다면 딥 카피 (deep-copy)와 같은 것을 작성할 것입니다. 이는 많은 작업이 될 수 있으며 메시지를 보내고받은 모든 곳에서 올바르게 수행되어야하며 구조 구성을 변경하려고 할 때마다 다시해야합니다. 그리고 한 곳에서 실수를하면 혼란을 일으킬 수 있습니다. 그리고 GCC와 아마도 MSC에서의 구조 패킹의 차이점에 대해서도 여전히 걱정해야합니다. 개인적으로 말하면 나는 게으르다. GPB와 같은 것을 사용하는 것을 선호한다. 나 자신을 그렇게하는 것을 피할 수있게 해주 며, 또한 더 유연하다. – bazza

+0

@norikoSD, GPB보다 빠른 것을 원한다면 Capn Proto https://capnproto.org/를 시도 할 수 있습니다. 이것은 자연스럽게 직렬화가 아닌 바이트 복사 만 된 구조를 다른 프로그램들 사이의 레이아웃 차이를 돌본 프로그램에 배치하려고 노력했습니다. GPB와 원시 구조 (serial structure)와 같은 serialiser 전체에서 좋은 절충안이 될 수 있습니다. – bazza