我正在使用混合连接从侦听器请求数据。如果我可以写入和读取连接,我怎么知道我从连接中读取的响应符合我给出的请求?例如:
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()获取响应是与之关联的那个请求?或者那是必须管理的东西?
答案 0 :(得分:0)
了解更多有关天蓝色中继混合连接的信息,我现在明白了。
框架中没有任何同步请求/响应的概念,但如果您为每个请求使用新连接,并在侦听器中对同一连接做出响应,则可以确定响应是对于您发送的请求。
为每个请求生成一个新连接,然后确保将响应写入该连接。所以,看看微软的监听器示例代码,只要listener.AcceptConnectionAsync()
触发relayConnection
上的所有消息响应,就可以回到等待await listener.AcceptConnectionAsync();
while (true)
{
var relayConnection = await listener.AcceptConnectionAsync();
if (relayConnection == null)
{
break;
}
ProcessMessagesOnConnection(relayConnection, cts);
}