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