长轮询ACTUALLY如何在客户端上调用回调?

byt*_*ire 5 c# wcf basichttpbinding long-polling

客户端启动长轮询,在服务器上调用一个方法,并传入一个AsyncCallback包含回调委托的实例,当服务器异步返回客户端时将调用该委托.

现在我对此的理解是有限的,但似乎在BasicHttpWCF中AsyncCallback参数被序列化并发送到服务器,然后服务器对其进行反序列化,缓存它并最终调用它以"返回"到客户端.

首先,上述解释是否正确?其次,如何AsyncCallback通过网络在客户端上调用?

Bas*_*sic 6

连接保持打开状态,以便服务器响应现有连接,包括响应中的回调处理程序名称.

客户端了解消息的格式,然后可以使用服务器响应中的数据调用适当的本地方法(基于回调处理程序).

我通常不想引用维基百科,但在这种情况下,这对长期民意调查来说并不是一个糟糕的解释 ......

长轮询是传统轮询技术的变体,允许模拟从服务器到客户端的信息推送.通过长轮询,客户端以与普通轮询类似的方式从服务器请求信息.但是,如果服务器没有可用于客户端的任何信息,而不是发送空响应,则服务器保留请求并等待一些信息可用.一旦信息可用(或在适当的超时之后),就会向客户端发送完整的响应.然后,客户端通常会立即从服务器重新请求信息,这样服务器几乎总会有一个可用的等待请求,它可以用来传递数据以响应事件.在web/AJAX上下文中,长轮询也称为Comet编程.

澄清

  • 客户端向服务器发送POST,包括回调句柄并保持连接打开
  • 一段时间后,服务器使用POST和响应数据的回调句柄进行响应(当您AsyncCallback在服务器上调用方法时会发生这种情况)
  • 客户端从服务器读取响应,标识已返回的回调句柄,并使用它来标识要执行的方法,
  • 客户端执行回调句柄指定的方法,并传入服务器响应的其余部分.

这类似于JSONP的工作方式(回调部分,不长轮询),如果您熟悉它?实质上,Callback句柄只传递给服务器,以便可以与响应一起发回,并允许客户端调用正确的方法.

引擎盖下还有其他检查,以确保只调用预期的方法,恶意服务器不能只执行它在客户端代码中选择的任何方法.