在longpolling上,Signalr服务器是否将所有待处理请求作为单个响应发送给poll?

时间:2017-02-16 07:55:48

标签: c# json signalr long-polling responseformat

我们正在收到一个信号器客户端的待处理请求,在一个民意调查响应中聚集成一个数组,如下所示:

{"C":"s-0,9E632",
"M":[
84
{"H":"MyHub","M":"SetSomething","A":[{"myProp1":"setting","myProp2":59.0}]}
1,
84
{"H":"MyHub","M":"SetSomething","A":[{"myProp1":"setting","myProp2":60.0}]}
1,
84
{"H":"MyHub","M":"SetSomething","A":[{"myProp1":"setting","myProp2":61.0}]} 
1,
84
{"H":"MyHub","M":"SetSomething","A":[{"myProp1":"setting","myProp2":62.0}]}
1,
6b
{"H":"MyHub","M":"SetMore","A":[{"myProp3":"Somestring","myProp4":0}]}
2
]}

一般来说,对民意调查的单一回应如下:

{"C":"s-0,9E621","M":[
6b
{"H":"MyHub","M":"SetSomething","A":[{"myProp1":"setting","myProp2":59.0}]}
2
]}

我相信环形缓冲区会将消息存储到DefaultMessageBufferSize限制,并在轮询它时将这些消息发送到客户端。 我的问题是它们是一个接一个地发送的,比如一个队列,一个回复一个民意调查或一起发送的所有消息作为对第一个民意调查的回应(就像我们得到的,如上所述)?

背景和实际问题: 我们有一个信号器客户端(C1)处理longpolling和我们在云端的SignalR服务器。有一个用户(U1)连接到服务器并为C1发送消息,我们使用服务器上的Clients.User({C1})。{Method}将这些消息转发给C1。 当U1向C1发送多个快速请求,并且C1无法足够快地处理它们时,我们会看到发送给C1的聚合响应。 C1未配置为处理聚合响应,它拒绝该响应,我们在每次进一步的轮询中看到来自服务器的C1的相同聚集响应的无限循环。

非常感谢对此的任何见解。 提前谢谢。

1 个答案:

答案 0 :(得分:0)

关于这个问题的答案,首先,在长池中,signalR永远不会默认连接。

SignalR的工作程序 -

  1. 尝试与WebSocket连接。

  2. 如果无法连接,则会尝试连接服务器发送的事件。

  3. 即使失败,也会尝试使用服务器框架。

  4. 即使失败,也会使用长轮询作为后备。

  5. 可以找到更多here

    关于它的表现,你可以在here找到更多信息。

    因此,测试signalR可以处理与网络设备可以处理的请求一样多的请求,因此对数据传输几乎没有限制。

    你的问题的答案 -

    在你的情况下,我们需要检查一些事情。

    1. 是否已启用HTTPS?如果没有,请follow this link设置HTTPS,因为如果没有HTTPS,您将永远无法使用WebSocket,建议使用。

    2. 如果启用了HTTP,那么它应该与WebSocket通信,如果网络正常,这种问题永远不会发生。但是对于你的情况,我认为你的网络存在一些问题,导致一些数据丢失,这就是它一次发送太多数据的原因。

    3. 请检查signalR的超时配置。您可以尝试更改signalR的超时设置。

    4. 我认为,如果你遵循这三件事,你就可以找到问题的解决方案。