我正在使用混合连接从监听器请求数据。如果我可以对连接进行写入和读取,我如何知道从连接读取的响应与我给出的请求相匹配?例如:
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() 是与要求?或者这是必须管理的事情?
最佳答案
进一步了解 azure 中继混合连接,我现在明白了。
框架中实际上没有任何同步请求/响应的概念,但是如果您为每个请求使用一个新连接,并在监听器中的同一连接上响应,您可以确定该响应是针对您发送的请求。
为每个请求生成一个新连接,然后确保将响应写入该连接。因此,查看 Microsoft 的监听器示例代码,每当 listener.AcceptConnectionAsync()
触发时,都会在 relayConnection
上执行所有消息响应,然后返回等待 await Listener.AcceptConnectionAsync ();
while (true)
{
var relayConnection = await listener.AcceptConnectionAsync();
if (relayConnection == null)
{
break;
}
ProcessMessagesOnConnection(relayConnection, cts);
}
关于c# - Azure 中继混合连接 - 如何发送同步请求/响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49979746/