在收到请求后,需要先进行tcp通讯连接到另一个服务上获取数据,然后再将数据响应给前端;
那么在这个请求过程中,我如何在tcp拿到数据后,在响应给对应的请求?因为我是在请求处理函数中发送的tcp包,而接收返回的tcp包是在Recv回调函数中,此时我已经拿不到请求对象了。
在收到请求后,需要先进行tcp通讯连接到另一个服务上获取数据,然后再将数据响应给前端;
那么在这个请求过程中,我如何在tcp拿到数据后,在响应给对应的请求?因为我是在请求处理函数中发送的tcp包,而接收返回的tcp包是在Recv回调函数中,此时我已经拿不到请求对象了。
这种设计必须确定异步的时间
1.如果说tcp过来在2秒内,你的客户也不纠结这两秒。你可以直接用await/asynct
比如 webapi写成
task<object> GetXXX()
{ TaskCompleteSource<object> tcs=new TaskCompleteSource<object>();
taskComple
//回调C#是委托,当然我们可以多播,或者另外封装成Chanel《T》或其他的基于消息发布和订阅的处理
//这里就我当是委托,当然这里还需要控制超时的,这个我就不写了,你看明白这种处理手段,自己应该能写出如何控制超时的代码
tcp.回调+=(回调消息)=>{
if(回调消息==你要的消息) tcs.TrySerValue(消息)
}
tcp.sendmsg();//
retrun tcs.task
}
2.如果你tcp返回大于2秒,或者你的客户非常纠结这2秒。请考虑用其他方式返回数据,比如WebSocket 或者其他支持js的消息中间件