客户端启动长轮询,在服务器上调用方法并传入AsyncCallback
的实例,其中包含将在服务器异步返回客户端时调用的回调委托。
现在我对此的理解是有限的,但似乎在BasicHttp
WCF中AsyncCallback
参数被序列化并发送到服务器,然后服务器对其进行反序列化,缓存它并最终调用它以“获取”回到客户端。
首先,上述说明是否正确?其次,AsyncCallback
如何通过网络在客户端上调用?
答案 0 :(得分:6)
连接保持打开状态,以便服务器响应现有连接,包括响应中的回调处理程序名称。
客户端理解消息的格式,然后可以使用服务器响应中的数据调用适当的本地方法(基于回调处理程序)。
我通常不想引用维基百科,但在这种情况下,它是长期民意调查的not a bad explanation ......
长轮询是传统民意调查技术的一种变体 允许模拟从服务器到客户端的信息推送。 通过长轮询,客户端从服务器请求信息 与普通民意调查类似的方式。但是,如果服务器没有 客户可用的任何信息,而不是发送空 响应,服务器保存请求并等待一些信息 可用。一旦信息可用(或之后 合适的超时),将完整的响应发送给客户端。该 客户通常会立即重新请求来自的信息 服务器,以便服务器几乎总是可用 等待请求它可以用来传递数据以响应 事件。在web / AJAX上下文中,长轮询也称为Comet 编程。
AsyncCallback
的方法时会发生这种情况)这类似于JSONP的工作方式(回调部分,不长轮询),如果你熟悉它?本质上,Callback句柄只传递给服务器,以便它可以与响应一起发回,并允许客户端调用正确的方法。
还有一些额外的检查,以确保只调用预期的方法,恶意服务器不能只执行它在客户端代码中选择的任何方法。
答案 1 :(得分:4)
@ Basic的答案非常好,但我感觉自己喜欢写一些有些人更容易理解的描述。
AsyncCallback
的引用AsyncCallback
被调用信息所以它真的是框架(在客户端仍然)等待作为异步部分的响应。 TCP连接和服务器处理都是标准的(除了在长轮询中没有返回的情况下等待响应)
这应该描述任何语言的任何异步Web请求的基本过程,无论是长轮询,下载图像等。