가이드 목록 | 이전: Thread safety | 다음: PAIR 소켓
Routing ID¶
이 장이 답하는 것 — ROUTER와 STREAM에서 연결된 peer를 식별하는 routing id의 형식과 수명을 설명한다. 정확한 계약은 ROUTER와 STREAM 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 종료가 동기적으로 끝났다는 뜻은 아니다.