Libzmq Chapter 1 - Basics: Difference between revisions

From 탱이의 잡동사니
Jump to navigation Jump to search
No edit summary
Line 14: Line 14:
== Ask and Ye Shall Receive ==
== Ask and Ye Shall Receive ==
그럼 이제 코드를 보자. Hello World 예제부터 시작해볼 것이다. client 와 server 를 만들고, client 가 "Hello" 라고 server 에게 보내면, server 는 "World"라고 대답할 것이다. 여기 C 로 짜여진 서버가 있다. 포트 번호 5555 를 이용하여 ZeroMQ socket 을 열고, request 를 수신하고, "World" 라는 응답을 준다.
그럼 이제 코드를 보자. Hello World 예제부터 시작해볼 것이다. client 와 server 를 만들고, client 가 "Hello" 라고 server 에게 보내면, server 는 "World"라고 대답할 것이다. 여기 C 로 짜여진 서버가 있다. 포트 번호 5555 를 이용하여 ZeroMQ socket 을 열고, request 를 수신하고, "World" 라는 응답을 준다.
hwserver.c
<source lang=c>
// Hello World server
#include <zmq.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <assert.h>
#include <string.h>
int main(int argc, char** argv)
{
    // Socket to talk to clients
    void* context;
    void* responder;
    int ret;
   
    context = zmq_ctx_new();
    assert(context != NULL);
   
    responder = zmq_socket(context, ZMQ_REP);
    assert(responder != NULL);
   
    ret = zmq_bind(responder, "tcp://*:5555");
    assert(ret == 0);
   
    while(1) {
        char buffer[10];
       
        memset(buffer, 0x00, sizeof(buffer));
        zmq_recv(responder, buffer, sizeof(buffer) - 1, 0);
        printf("Received message. message[%s]\n", buffer);
       
        sleep(1);  // Do some 'work'
        zmq_send(responder, "World", 5, 0);
    }
   
    return 0;
}
</source>
hwclient.c
<source lang=c>
// Hello World client
#include <zmq.h>
#include <string.h>
#include <stdio.h>
#include <unistd.h>
#include <assert.h>
int main(int argc, char** argv)
{
    void* ctx;
    void* req;
    int req_cnt;
    int ret;
   
    printf("Connecting to hello world server..\n");
   
    ctx = zmq_ctx_new();
    assert(ctx != NULL);
   
    req = zmq_socket(ctx, ZMQ_REQ);
    assert(req != NULL);
   
    zmq_connect(req, "tcp://localhost:5555");
   
    for(req_cnt = 0; req_cnt != 10; req_cnt++) {
        char buffer[100];
       
        printf("Sending Hello %d..\n", req_cnt);
        sprintf(buffer, "Hello");
        zmq_send(req, buffer, strlen(buffer), 0);
       
        memset(buffer, 0x00, sizeof(buffer));
        ret = zmq_recv(req, buffer, sizeof(buffer) - 1, 0);
        printf("Received message. message[%s], cnt[%d], received_size[%d]\n", buffer, req_cnt, ret);
    }
   
    zmq_close(req);
    zmq_ctx_destroy(ctx);
   
    return 0;
}
</source>
== See also ==
*


[[category:libzmq]]
[[category:libzmq]]

Revision as of 23:14, 11 July 2016

Fixing the World

ZeroMQ 를 어떻게 설명할 수 있을까? 우리들 중 누군가는 끝내주는 기능들에 대해서 이야기를 하고 한다. 스테로이드를 맞은 소켓, 라우팅 기능이 있는 우편함, 빠른 속도!

Starting Assumptions

우리는 최소한 여러분이 최소한 ZeroMQ 3.2 버전 이상을 사용하고 있다고 가정한다. 그리고 Linux 혹은 그와 상응하는 운영체제를 사용하고 있다고 가정한다. 또한, 여러분이 더도 말고, 덜도 말고 딱 C example code 를 읽을 수 있다고 가정한다. 그리고 앞으로 계속해서 나올 PUSH 혹은 SUBSCRIBE 라는 말이 때때로 ZMQ_PUSH 혹은 ZMQ_SUBSCRIBE 라는 것을 이해할 수 있을 것이라고 가정한다.

Getting the Examples

예제 코드들은 아래 github 저장소에서 확인할 수 있다. 가장 쉽게 예제코드를 다운받을 수 있는 방법은 아래의 명령어로 저장소를 복사하는 것이다. <source lang=bash> git clone --depth=1 https://github.com/imatix/zguide.git </source> 다음, examples 의 하위 디렉토리를 살펴보자. 각각의 언어별로 예제가 있는 것을 확인할 수 있을 것이다. 만약 여러분이 사용하는 언어의 예제가 없다면 submit a translation 할 것을 강추한다. 이것이 바로 이 문서가 어떻게 여러 사람들에게 유용할 수 있는지의 이유이다. 모든 예제들은 MIT/X11 라이센스를 가진다.

Ask and Ye Shall Receive

그럼 이제 코드를 보자. Hello World 예제부터 시작해볼 것이다. client 와 server 를 만들고, client 가 "Hello" 라고 server 에게 보내면, server 는 "World"라고 대답할 것이다. 여기 C 로 짜여진 서버가 있다. 포트 번호 5555 를 이용하여 ZeroMQ socket 을 열고, request 를 수신하고, "World" 라는 응답을 준다.

hwserver.c <source lang=c>

// Hello World server

  1. include <zmq.h>
  2. include <stdio.h>
  3. include <unistd.h>
  4. include <string.h>
  5. include <assert.h>
  6. include <string.h>

int main(int argc, char** argv) {

   // Socket to talk to clients
   void* context;
   void* responder;
   int ret;
   
   context = zmq_ctx_new();
   assert(context != NULL);
   
   responder = zmq_socket(context, ZMQ_REP);
   assert(responder != NULL);
   
   ret = zmq_bind(responder, "tcp://*:5555");
   assert(ret == 0);
   
   while(1) {
       char buffer[10];
       
       memset(buffer, 0x00, sizeof(buffer));
       zmq_recv(responder, buffer, sizeof(buffer) - 1, 0);
       printf("Received message. message[%s]\n", buffer);
       
       sleep(1);   // Do some 'work'
       zmq_send(responder, "World", 5, 0);
   }
   
   return 0;

} </source>

hwclient.c <source lang=c>

// Hello World client

  1. include <zmq.h>
  2. include <string.h>
  3. include <stdio.h>
  4. include <unistd.h>
  5. include <assert.h>

int main(int argc, char** argv) {

   void* ctx;
   void* req;
   int req_cnt;
   int ret;
   
   printf("Connecting to hello world server..\n");
   
   ctx = zmq_ctx_new();
   assert(ctx != NULL);
   
   req = zmq_socket(ctx, ZMQ_REQ);
   assert(req != NULL);
   
   zmq_connect(req, "tcp://localhost:5555");
   
   for(req_cnt = 0; req_cnt != 10; req_cnt++) {
       char buffer[100];
       
       printf("Sending Hello %d..\n", req_cnt);
       sprintf(buffer, "Hello");
       zmq_send(req, buffer, strlen(buffer), 0);
       
       memset(buffer, 0x00, sizeof(buffer));
       ret = zmq_recv(req, buffer, sizeof(buffer) - 1, 0);
       printf("Received message. message[%s], cnt[%d], received_size[%d]\n", buffer, req_cnt, ret);
   }
   
   zmq_close(req);
   zmq_ctx_destroy(ctx);
   
   return 0;

} </source>

See also