Azure Relay Hybrid Connections - как отправить синхронный запрос / ответ
Я использую гибридные соединения для запроса данных от слушателя. Если я могу написать и прочитать соединение, как я могу узнать, что ответ, который я прочитал из соединения, совпадает с запросом, который я дал? Например:
private HybridConnectionClient _client = new HybridConnectionClient(***);
public override async Task<RelayResponse> SendAsync(RelayRequest request)
{
var stream = await _client.CreateConnectionAsync();
var writer = new StreamWriter(stream) { AutoFlush = true };
var reader = new StreamReader(stream);
var reqestSerialized = JsonConvert.SerializeObject(request);
await writer.WriteLineAsync(reqestSerialized);
string responseSerialized = await reader.ReadLineAsync();
var response = JsonConvert.DeserializeObject<RelayResponse>(responseSerialized);
return response;
}
Если прослушиватель на этом соединении одновременно читает и отвечает на многие запросы, то есть ли в любом случае информация о том, что следующий Readline(), который мы выполняем на стороне клиента для получения ответа, связан с запросом? Или это то, что нужно управлять?
1 ответ
Понимая немного больше о гибридных соединениях Azure Relay, я теперь понимаю это.
На самом деле не существует какой-либо концепции синхронного запроса / ответа в платформе, но если вы используете новое соединение для каждого запроса и отвечаете на это то же соединение в приемнике, вы можете быть уверены, что ответ предназначен для отправленного вами запроса.,
Создайте новое соединение для каждого запроса, затем убедитесь, что ответ записан в это соединение. Так что, глядя на пример кода слушателя Microsoft, всякий раз, когда listener.AcceptConnectionAsync()
пожары делают все сообщения ответа на relayConnection
затем вернитесь к ожиданию в await listener.AcceptConnectionAsync();
while (true)
{
var relayConnection = await listener.AcceptConnectionAsync();
if (relayConnection == null)
{
break;
}
ProcessMessagesOnConnection(relayConnection, cts);
}