Я, должно быть, что-то делаю не так ... мой сервер gRPC реализован в node.js:
function handler(call, callback) {
console.log('Received request at ' + Date.now());
setTimeout(() => {
callback({ message: 'Done and done' });
}, 100);
}
Если я назову это 1000 в узле, я получу 1000 ответов примерно за 100 мс:
const resps = [];
for (let i = 0; i < 1000; i += 1) {
client.doit({ data }, (err, resp) => {
resps.push(resp);
if (resps.length === 1000) {
onDone();
}
});
}
Тем не менее, при вызове сервера из Python с использованием service.future я вижу, что сервер получает запрос только после того, как предыдущий вернул:
for _ in range(1000):
message = Message(data=data)
resp = client.doit.future(message)
resp = resp.result()
resps.append(resp)
Я получаю, что парадигма IO узла отличается (все асинхронно; цикл обработки событий и т. Д.), И приведенный выше пример Python блокирует out.result()
, но мой вопрос: могу ли я изменить / оптимизировать клиент Python, чтобы он можно сделать несколько звонков на мой сервер, не дожидаясь возвращения первого?