1.
socket.BeginSend(……. new AsyncCallback(sendcallback1)……..);
void sendcallback1(…){
………
socket.BeginReceive(……..new AsyncCallback(receivecallback1)……..);
}
void receivecallback1(……){
//收到服务器发过来的信息send1;
}
2.
socket.BeginSend(…….new AsyncCallback(sendcallback2)……..);
void sendcallback2(…){
………
socket.BeginReceive(……. new AsyncCallback(receivecallback2)……..);
}
void receivecallback2(……){
//收到服务器发过来的信息send2;
}
在一个socket里面,本人分别开了两个BeginSend,发送完成SendCallback后再分别写两个BeginReceive,有时候send2的数据回调到send1里面去了,本人想问,能否BeginReceive没有识别那个通道send出去,再返回?BeginReceive只是排队接受一个通道的信息?望高手解答一下?
socket.BeginSend(……. new AsyncCallback(sendcallback1)……..);
void sendcallback1(…){
………
socket.BeginReceive(……..new AsyncCallback(receivecallback1)……..);
}
void receivecallback1(……){
//收到服务器发过来的信息send1;
}
2.
socket.BeginSend(…….new AsyncCallback(sendcallback2)……..);
void sendcallback2(…){
………
socket.BeginReceive(……. new AsyncCallback(receivecallback2)……..);
}
void receivecallback2(……){
//收到服务器发过来的信息send2;
}
在一个socket里面,本人分别开了两个BeginSend,发送完成SendCallback后再分别写两个BeginReceive,有时候send2的数据回调到send1里面去了,本人想问,能否BeginReceive没有识别那个通道send出去,再返回?BeginReceive只是排队接受一个通道的信息?望高手解答一下?
解决方案
50
一个并发Send、且并发Receive的高效率的机制,它需要在信令协议上本人来保证时序。例如发送的消息信令中有一个“序号”字段,而接收的消息中也有一个“序号”字段,这样系统可能以 1、3、2、4的顺序实际发送消息,而以4、1、2、3的顺序得到了返回结果,系统应该能自动按照4、1、2、3的顺序找到之前注册的业务回调。这需要你本人写一个十几行、二十几行的GateWay代码来处理。假如你懒得写一个 GateWay,那么就只能用最为笨拙的方式来安排消息发送接收,不能高效率地并发处理。