콘텐츠로 이동

가이드 목록 | 이전: Thread safety | 다음: PAIR 소켓

Routing ID

이 장이 답하는 것 — ROUTER와 STREAM에서 연결된 peer를 식별하는 routing id의 형식과 수명을 설명한다. 정확한 계약은 ROUTERSTREAM socket 스펙이 소유한다.

Routing id는 routed raw socket에 연결된 peer를 식별한다. Core는 byte sequence와 길이를 가진 zlink_routing_id_t로 이 값을 표현한다.

Local id 설정

Application에 고정된 local identity가 필요하면 connect 또는 bind 전에 zlink_set_routing_id()를 호출한다. 설정한 값은 zlink_get_routing_id()로 읽는다.

const char id[] = "worker-7";
zlink_set_routing_id(socket, id, sizeof(id) - 1);
/* Connection handshake가 값을 사용하기 전에 routing id를 설정한다. */

수신과 응답

zlink_recv(), zlink_subscribe(), zlink_router_recv()는 socket-owned routing-id view의 pointer를 반환한다. 같은 socket에서 다음 data receive 함수에 진입하면 성공 여부와 관계없이 이 view가 무효화된다. 각 함수는 payload record 전체를 caller가 제공한 배열에 채운다.

const zlink_routing_id_t *source_rid = NULL;
zlink_reply_token_t reply_token = 0;
zlink_msg_t parts[8];
size_t part_count = 0;

if (zlink_router_recv(router, &source_rid, &reply_token,
                     parts, 8, &part_count, ZLINK_RECV_FLAGS_NONE) == ZLINK_RECV_OK) {
    /* 같은 router에서 다음 data receive 전에 source_rid를 즉시 복사한다. */
    zlink_multipart_close(parts, part_count);
}

일반 routed message는 수신한 routing id와 zlink_send_rid()를 사용한다. Request에 응답할 때는 반환된 불투명 token과 reply part 배열을 zlink_reply()에 전달한다. 일반 DATA의 token은 0이다.

Peer 연결 종료

zlink_disconnect_rid()는 일치하는 peer connection의 비동기 종료를 요청한다. 성공은 종료 요청이 접수됐다는 뜻이며 transport 종료가 동기적으로 끝났다는 뜻은 아니다.