{"id":1162,"date":"2018-07-14T22:31:19","date_gmt":"2018-07-14T21:31:19","guid":{"rendered":"https:\/\/solidt.eu\/site\/?p=1162"},"modified":"2020-01-06T17:37:38","modified_gmt":"2020-01-06T16:37:38","slug":"zeromq-zmq-router-dealer","status":"publish","type":"post","link":"https:\/\/solidt.eu\/site\/zeromq-zmq-router-dealer\/","title":{"rendered":"ZeroMQ (zmq) Router-Dealer"},"content":{"rendered":"<pre class=\"lang:js decode:true \" title=\"router.js\">const zmq = require('zeromq');\nconst address = 'tcp:\/\/127.0.0.1:12345';\n\nlet router = zmq.socket('router');\n\nrouter.bind(address, (err) =&gt; {\n    if (err) {\n        console.log(err);\n    } else {\n        console.log('Listening on 5563...');\n    }\n});\n\nrouter.on('message', (...args) =&gt; {\n    let msg = args.map((a) =&gt; a.toString());\n    let id = args[0];\n\n    setTimeout(() =&gt; {\n        let n = Math.ceil(Math.random() * 50) - 10;\n        router.send([id, \"weather\", n, msg[1]]);\n    }, 100);\n});<\/pre>\n<pre class=\"lang:js decode:true \" title=\"dealer.js\">const zmq = require('zeromq');\nconst address = 'tcp:\/\/127.0.0.1:12345';\n\nvar dealer = zmq.socket('dealer');\ndealer.connect(address);\ndealer.identity = String(Math.random()).substring(2);\n\ndealer.on('message', (...args) =&gt; {\n    let msg = args.map((a) =&gt; a.toString());\n    console.log('received', msg);\n});\n\nsetInterval(() =&gt; {\n    let msg = [\"weatherinfo\" + dealer.identity];\n    console.log('send', msg);\n    dealer.send(msg);\n}, 30);<\/pre>\n<p>&nbsp;<\/p>\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"js\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">const zmq = require('zeromq');\nconst address = 'tcp:\/\/127.0.0.1:12345';\nconst net = require('net');\n\nconst keyPair = zmq.curveKeyPair();\nlet router = new zmq.Router({\n    curveServer: false,\n    curvePublicKey: keyPair.publicKey,\n    curveSecretKey: keyPair.secretKey,\n    curveServerKey: 'Z-s:wV#DnaWa*I%^s!(xg^4)GSf^o2h1&amp;E95Se.^'\n});\n\nconst listen = async () => {\n    for await (const [sender, msg] of router) {\n        console.log(\"received: %s\", Buffer.from(sender).toString('base64'), msg.toString());\n        setTimeout(() => {\n            let n = Math.ceil(Math.random() * 50) - 10;\n            router.send([sender, \"hoi12345#\"]);\n        }, 100);\n    }\n}\n\nconst listenForEvents = async () => {\n    for await (event of router.events) {\n        console.log(`${event.type} ${JSON.stringify(event)}`)\n    }\n}\n\nconst run = async () => {\n    await router.bind(address);\n    await Promise.all([ \n        listen(),\n        listenForEvents()\n    ]);\n};\n\nrun();\n<\/pre>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"js\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">const zmq = require('zeromq');\nconst fs = require('fs');\n\nconst address = 'tcp:\/\/127.0.0.1:12345';\nlet i = 1;\nconst run = async () => {    \n    const fileName = \"server.json\";\n    let keyPair = null;\n\n    if (fs.existsSync(fileName)) {\n        keyPair = JSON.parse(fs.readFileSync(\"server.json\"));\n    } else {\n        keyPair = zmq.curveKeyPair();\n        fs.writeFileSync(\"server.json\", JSON.stringify(keyPair, null, 4));    \n    }\n\n    var dealer = new zmq.Dealer({\n        curveServer: true,\n        curvePublicKey: keyPair.publicKey,\n        curveSecretKey: keyPair.secretKey,\n    });\n\n    dealer.connect(address);\n\n    setInterval(() => {\n        let msg = [[ \"weatherinfo\", i ]]; \/\/ + dealer.identity\n        i += 1;\n        console.log('send', msg);\n        dealer.send(msg);\n    }, 300);\n\n    console.log(\"receiving...\");\n    for await (const [msg] of dealer) {\n        console.log(\"received: %s\", msg.toString())\n    }\n}\n\nrun();<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>const zmq = require(&#8216;zeromq&#8217;); const address = &#8216;tcp:\/\/127.0.0.1:12345&#8217;; let router = zmq.socket(&#8216;router&#8217;); router.bind(address, (err) =&gt; { if (err) { console.log(err); } else { console.log(&#8216;Listening on 5563&#8230;&#8217;); } }); router.on(&#8216;message&#8217;, (&#8230;args) =&gt; { let msg = args.map((a) =&gt; a.toString()); let id = args[0]; setTimeout(() =&gt; { let n = Math.ceil(Math.random() * 50) &#8211; 10; router.send([id, &#8220;weather&#8221;, [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"inline_featured_image":false,"footnotes":""},"categories":[5],"tags":[],"class_list":["post-1162","post","type-post","status-publish","format-standard","hentry","category-javascript"],"_links":{"self":[{"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/posts\/1162","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/comments?post=1162"}],"version-history":[{"count":3,"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/posts\/1162\/revisions"}],"predecessor-version":[{"id":3107,"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/posts\/1162\/revisions\/3107"}],"wp:attachment":[{"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/media?parent=1162"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/categories?post=1162"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/tags?post=1162"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}