У меня есть 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?)
}
}
}
}
Запросы принимаются и обрабатываются клиентом, а ответы отправляются обратно, но как Я увеличиваю количество клиентов, я не получаю сообщения на сервере. Кажется, они как-то теряются.
Есть идеи, как это решить?