我有一个请求/响应协议运行在TCP上,我想提供一个异步/等待API。该协议是STOMP,它是一种基于TCP或SSL运行的相当简单的基于文本的协议。在STOMP中,客户端发送六个左右命令帧中的一个,并在该命令的头部指定一个receipt
ID。服务器将以RECEIPT
或ERROR
框架与receipt-id
字段进行响应,因此客户端可以将响应与原始请求进行匹配。服务器也可以随时发送一个MESSAGE
帧(STOMP基本上是一个消息协议),它不包含receipt-id
。创建包装请求/响应协议的异步/等待API
要允许多个未完成的请求并处理任何MESSAGE
帧,计划始终有一个Socket.BeginReceive()
未完成。所以我在想的是最简单的实现是创建一个可等待的事件(如互斥体),将该事件存储在一个表中,将设置为receipt
的命令请求发送到表中并阻止该事件。当socket.BeginReceive()
触发功能可以从消息中获得receipt-id
,在表中查找事件并发信号(并存储某种状态,如成功或错误)。这将唤醒调用函数,该函数可以查看结果并将调用应用程序的成功或失败返回。
这听起来基本正确吗?我以前使用过异步/等待API,但从未写过自己的API。如果没关系,我应该使用什么样的等待事件?一个简单的Monitor.Wait()
会阻止,但不是我想要的方式,对吗?如果我将整个东西包装在Task.Run()
中,那么Monitor.Wait()
的行为会正常吗?或者是否有我应该使用的新同步构造?我基本上实施HttpClient.GetAsync()
,有没有人知道如何在封面下工作?
试着看一下WCF http://msdn.microsoft.com/en-us/library/ms731082.aspx非常有效! – legrandviking 2013-02-13 23:37:26