我有一个客户端,通过定期(每4秒)发送一个新的位置来更新其在服务器上的位置。我还有一个跟踪以前移动设备的客户端,通过定期对服务器进行花粉(每5秒)并获取最新位置。
此通信是通过SignalR(用于发送最新位置)还是使用定时器进行的?我这样说是因为SignalR有一些开销会产生更大的请求大小,这可能会非常昂贵。
谢谢你, 莱恩
答案 0 :(得分:10)
现在,根据我对您的描述的理解,您正在进行多个更新POST,然后侦听器正在使用轮询GET请求。这些具有带头的单独HTTP请求的开销,如果不使用keep-alive或超过保持活动超时,则[重新]建立TCP连接。
使用SignalR,您将能够至少,改善事物的轮询GET方面,因为SignalR可以使用 long 轮询,这将汇集多个响应单个HTTP GET请求并在“实时”中执行,而不是始终具有硬4秒滞后时间。从那里开始,您可以通过服务器发送事件(SSE)向完整的Web套接字工作,具体取决于客户端和服务器功能。任何这些方法都应该比您当前描述的实现更有效。
每条SignalR信息周围只有一个小“信封”。与HTTP标头相比,您的浏览器客户端肯定不得不随每次更新发送POST并立即轮询GET,我认为SignalR将轻松赢得这一点。显然,在任何一种情况下,消息的有效负载都是相同的JSON,所以这是一个清洗。
最重要的是,我认为,使用SignalR为您提供了一个编程模型,它可以从最终使用的确切底层技术中抽象出来,并为您提供一致的实时通信API,而不必最终担心到thunking断开的请求/响应模型。