User Tools

Site Tools


Differences

This shows you the differences between two versions of the page.

Link to this comparison view

c:nanomsg-nextgen [2019-05-26 17:22]
ziggi created
c:nanomsg-nextgen [2020-02-15 00:57]
Line 1: Line 1:
-======Nano message next-generation framework sample====== 
  
-It is a good library. IMHO after some my small research, ​ 
-better ZeroMQ (TLS, websockets, thread-safe,​ "​unkillable"​ req-rep, etc) 
- 
-See [[https://​nanomsg.github.io/​nng/​RATIONALE.html|RATIONALE]] 
- 
-  * Sources [[https://​github.com/​nanomsg/​nng]] ​ 
-  * Mans [[https://​nanomsg.github.io/​nng/​man/​v1.1.0/​nng.7]] 
- 
-====PUB-SUB (publisher-subscriber) model sample==== 
- 
-===nng-pub.c=== 
- 
-<code c nng-pub.c>​ 
-/* 
- * Copyright 2019 Oleg Borodin ​ <​borodin@unix7.org>​ 
- */ 
-#include <​stdlib.h>​ 
-#include <​stdio.h>​ 
-#include <​string.h>​ 
-#include <​time.h>​ 
-#include <​unistd.h>​ 
- 
-#include <​nng/​nng.h>​ 
-#include <​nng/​protocol/​pubsub0/​pub.h>​ 
-#include <​nng/​protocol/​pubsub0/​sub.h>​ 
- 
-char* date(void) { 
-    time_t now = time(&​now);​ 
-    struct tm *info = localtime(&​now);​ 
-    char *text = asctime(info);​ 
-    text[strlen(text)-1] = '​\0';​ 
-    return text; 
-} 
- 
-void fatal(const char *func, int rv) { 
-    fprintf(stderr,​ "%s: %s\n", func, nng_strerror(rv));​ 
-} 
- 
-int main(int argc, char **argv) { 
- 
-    nng_socket sock; 
-    int rv; 
-    char url[] = "​tcp://​127.0.0.1:​1024";​ 
- 
-    if ((rv = nng_pub0_open(&​sock)) != 0) { 
-            fatal("​nng_pub0_open",​ rv); 
-    } 
-    if ((rv = nng_listen(sock,​ url, NULL, 0)) < 0) { 
-            fatal("​nng_listen",​ rv); 
-    } 
-    while(1) { 
-        char* ts = date(); 
-        printf("​nng send %s\n", ts); 
-        if ((rv = nng_send(sock,​ ts, strlen(ts) + 1, 0)) != 0) { 
-                fatal("​nng_send",​ rv); 
-        } 
-        sleep(1); 
-    } 
-} 
-</​code>​ 
- 
-===nng-sub.c=== 
- 
-<code c nng-sub.c>​ 
-/* 
- * Copyright 2019 Oleg Borodin ​ <​borodin@unix7.org>​ 
- */ 
- 
-#include <​stdlib.h>​ 
-#include <​stdio.h>​ 
-#include <​string.h>​ 
-#include <​time.h>​ 
-#include <​unistd.h>​ 
- 
-#include <​nng/​nng.h>​ 
-#include <​nng/​protocol/​pubsub0/​pub.h>​ 
-#include <​nng/​protocol/​pubsub0/​sub.h>​ 
- 
-void fatal(const char *func, int rv) { 
-    fprintf(stderr,​ "%s: %s\n", func, nng_strerror(rv));​ 
-} 
- 
-int main(int argc, char **argv) { 
- 
-    char name[] = "​client01";​ 
-    nng_socket sock; 
-    int rv; 
-    char url[] = "​tcp://​127.0.0.1:​1024";​ 
- 
-    if ((rv = nng_sub0_open(&​sock)) != 0) { 
-        fatal("​nng_sub0_open",​ rv); 
-    } 
- 
-    if ((rv = nng_setopt(sock,​ NNG_OPT_SUB_SUBSCRIBE,​ "",​ 0)) != 0) { 
-        fatal("​nng_setopt",​ rv); 
-    } 
-    if ((rv = nng_dial(sock,​ url, NULL, 0)) != 0) { 
-        fatal("​nng_dial",​ rv); 
-    } 
-    while(1) { 
-        char *buffer = NULL; 
-        size_t size; 
-        if ((rv = nng_recv(sock,​ &​buffer,​ &size, NNG_FLAG_ALLOC)) != 0) { 
-                fatal("​nng_recv",​ rv); 
-        } 
-        printf("​client (%s) received: %s\n", name, buffer); 
-        nng_free(buffer,​ size); 
-    } 
-} 
- 
-</​code>​ 
- 
- 
-====REQ-REP (request-report) model sample==== 
- 
-===nng-rep.c=== 
-<code c nng-rep.c>​ 
-/* 
- * Copyright 2019 Oleg Borodin ​ <​borodin@unix7.org>​ 
- */ 
- 
-#include <​stdlib.h>​ 
-#include <​stdio.h>​ 
-#include <​string.h>​ 
-#include <​time.h>​ 
-#include <​unistd.h>​ 
- 
-#include <​nng/​nng.h>​ 
-#include <​nng/​protocol/​reqrep0/​rep.h>​ 
-#include <​nng/​protocol/​reqrep0/​req.h>​ 
- 
-#include <​nng/​protocol/​pubsub0/​pub.h>​ 
-#include <​nng/​protocol/​pubsub0/​sub.h>​ 
- 
-char* date(void) { 
-    time_t now = time(&​now);​ 
-    struct tm *info = localtime(&​now);​ 
-    char *text = asctime(info);​ 
-    text[strlen(text)-1] = '​\0';​ 
-    return text; 
-} 
- 
-void fatal(const char *func, int rv) { 
-    fprintf(stderr,​ "%s: %s\n", func, nng_strerror(rv));​ 
-} 
- 
-int main(int argc, char **argv) { 
- 
-    nng_socket sock; 
-    int rv; 
- 
-    char url[] = "​tcp://​127.0.0.1:​1024";​ 
- 
-    if ((rv = nng_rep0_open(&​sock)) != 0) { 
-            fatal("​nng_rep0_open",​ rv); 
-    } 
-    if ((rv = nng_listen(sock,​ url, NULL, 0)) != 0) { 
-            fatal("​nng_listen",​ rv); 
-    } 
-    while(1) { 
-        char *buf = NULL; 
-        size_t sz; 
-        if ((rv = nng_recv(sock,​ &buf, &sz, NNG_FLAG_ALLOC)) != 0) { 
-                fatal("​nng_recv",​ rv); 
-        } 
-        printf("​received request\n"​);​ 
- 
-        char *d = date(); 
-        printf("​sending %s\n", d); 
-        if ((rv = nng_send(sock,​ d, strlen(d) + 1, 0)) != 0) { 
-                fatal("​nng_send",​ rv); 
-        } 
-        nng_free(buf,​ sz); 
-    } 
-} 
-</​code>​ 
- 
-===nng-req.c=== 
- 
-<code c nng-req.c>​ 
-/* 
- * Copyright 2019 Oleg Borodin ​ <​borodin@unix7.org>​ 
- */ 
- 
-#include <​stdlib.h>​ 
-#include <​stdio.h>​ 
-#include <​string.h>​ 
-#include <​time.h>​ 
-#include <​unistd.h>​ 
- 
-#include <​nng/​nng.h>​ 
-#include <​nng/​protocol/​reqrep0/​rep.h>​ 
-#include <​nng/​protocol/​reqrep0/​req.h>​ 
- 
-#include <​nng/​protocol/​pubsub0/​pub.h>​ 
-#include <​nng/​protocol/​pubsub0/​sub.h>​ 
- 
-void fatal(const char *func, int rv) { 
-    fprintf(stderr,​ "%s: %s\n", func, nng_strerror(rv));​ 
-} 
- 
-int main(int argc, char **argv) { 
- 
-    nng_socket sock; 
-    int rv; 
-    char url[] = "​tcp://​127.0.0.1:​1024";​ 
- 
-    if ((rv = nng_req0_open(&​sock)) != 0) { 
-            fatal("​nng_socket",​ rv); 
-    } 
-    if ((rv = nng_dial(sock,​ url, NULL, 0)) != 0) { 
-            fatal("​nng_dial",​ rv); 
-    } 
- 
-    while(1) { 
-        char *buf = NULL; 
-        char data[] = "​date";​ 
-        size_t sz = 0; 
-        printf("​sending request\n"​);​ 
-        if ((rv = nng_send(sock,​ data, strlen(data),​ 0)) != 0) { 
-            fatal("​nng_send",​ rv); 
-        } 
- 
-        if ((rv = nng_recv(sock,​ &buf, &sz, NNG_FLAG_ALLOC)) != 0) { 
-            fatal("​nng_recv",​ rv); 
-        } 
-        printf("​received date %s\n", buf); 
-        nng_free(buf,​ sz); 
- 
-        sleep(1); 
-    } 
-    nng_close(sock);​ 
-    return (0); 
-} 
- 
-</​code>​ 
- 
----- 
-[<>]