Сообщения ZeroMQ REQ-ROUTER не принимаются - PullRequest
1 голос
/ 07 марта 2020

У меня есть 10 клиентов, которые получают запросы от сервера, обрабатывают запросы и примерно одновременно отправляют сообщения на сервер. Сторона приема такова:

Сначала я создаю сокет:

val commandSocket = zmqContext.createSocket(SocketType.ROUTER)
commandSocket.identity = identity.toByteArray()
commandSocket.bind(commandBindAddr)

Затем отправьте запрос в виде команд всем клиентам;

for (client in clientsArray) {
            commandSocket.sendMore(client)
            commandSocket.sendMore("")
            commandSocket.send(queryBytes)
            println("command server sent to " + client.decodeToString() )
        }

Затем я жду ответа; ....

 fun start(): Thread {
        return thread(start=true) {
            println("CommandServer")
            while (true) {
                val addrb = commandSocket.recv()
                val empty = commandSocket.recv()
                val msg = commandSocket.recv()
                println("message received from ${String(addrb)}")
                bq.add(Pair(addrb, msg))
            }
        }
}

Клиентская сторона такова: Создание сокета:

  val querySocket = zmqContext.createSocket(SocketType.REQ)
            querySocket.identity = identity.toByteArray()
            querySocket.connect(queryAddr)

    fun start(): Thread {
    val serializer = Cbor()

    return thread(start=true) {
        println("QueryProcessor")
        while (true) {
            val recvBytes = querySocket.recv()
            if (recvBytes != null) {
                val q = serializer.load(Query.serializer(), recvBytes)

                val qr = bp.process(q)
                val res = serializer.dump(QueryResponse.serializer(), qr)

                println("$sending query response back")
                querySocket.send(res)
                println("${logTS()} sent to parent")
            } else {
                querySocket.send(null as ByteArray?)
            }
        }
    }
}

Запросы принимаются и обрабатываются клиентом, а ответы отправляются обратно, но как Я увеличиваю количество клиентов, я не получаю сообщения на сервере. Кажется, они как-то теряются.

Есть идеи, как это решить?

...