Прокси-шаблон ZeroMQ (Маршрутизатор / Маршрутизатор) не соединяет Front с Back и Back с Front - PullRequest
0 голосов
/ 06 декабря 2018

Я практикуюсь с модулем ZeroMQ для создания Socket, но у меня проблема с шаблоном Proxy (Маршрутизатор / Маршрутизатор), я смог убедиться, что Клиент хорошо соединяется с Front и Worker с Back, нокогда оно приходит, чтобы отправить сообщение Front to Back или наоборот не отправлено, кто-нибудь знает почему?

Прикрепил код брокера, если необходимо, чтобы его мог предоставить код клиента или рабочего.

import * as zmq from 'zeromq'

const ipBrokerClient: string = 'tcp://*:4000'
const ipBrokerWorker: string = 'tcp://*:3000'
const idWorker: string = `worker_proxy_${process.pid}`

let frontend= zmq.socket('router'),
    backend= zmq.socket('router')

let workers: Array<string> = []

export = {

    loadFrontend(): void {
       frontend.identity = 'frontend_proxy' + process.pid
       frontend.bind(ipBrokerClient, function (err: string) {
           if (err) throw err

           console.log("Frontend in listening: " + frontend.identity)

           frontend.on('message', function (...buffer: Array<Buffer>): void {

            let idClient: Buffer = buffer[0],
                empty: Buffer = buffer[1],
                query: Buffer = buffer[2]

            let interval = setInterval(function (): void {

                if (workers.length > 0) {
                    console.log("Frontend send: " + query)

                    backend.send([workers.shift(), '', idClient, '', query])
                    clearInterval(interval)
                }

            }, 10)
        })
    })
},

    loadBackend(): void {
        backend = zmq.socket('router')
        backend.identity = 'backend_proxy' + process.pid
        backend.bind(ipBrokerWorker, function (err: string): void {
            if (err) throw err

            console.log("Backend in listening: " + backend.identity)

            backend.on('message', function (...buffer: Array<Buffer>) {
               console.log(buffer)
               let idWorker: Buffer = buffer[0],
                   empty0: Buffer = buffer[1],
                   idClient: Buffer = buffer[2],
                   empty1: Buffer = buffer[3],
                   query: Buffer = buffer[4]

               workers.push(idClient.toString())

               console.log("Worker available: " + idClient)
               frontend.send("Hello")

               if (workers[0] != "READY") {
                   frontend.send([idClient, empty0, query])
               }
           })
        })
    },

loadBroker(): void {
    this.loadFrontend()
    this.loadBackend()
  }
} 

Извините, если вопрос не очень хорошо сделан, я новичок на форуме.

Спасибо

...