Websocket 桌面应用程序应如何持续轮询服务器以获取更新?

Websocket 桌面应用程序应如何持续轮询服务器以获取更新?,websocket,server-side,Websocket,Server Side,我正在编写一个桌面应用程序,它需要对服务器上随时可能发生的更改做出响应,并且我希望该应用程序在计算机登录时始终运行。是否有一种方法被认为是最标准的,或者应该避免的方法?我考虑过的几种解决方案是: 每秒向服务器发送两次请求(这大约是我想要的响应时间) 打开websockets连接,以便只有一个开放的管道供服务器写入 如果服务器只是在没有数据时返回错误或短消息,那么使用第一个选项是否不好?这会影响网络上的其他网络活动吗 提前谢谢 如果服务器知道何时有可用的更新,那么最好通知您的桌面应用程序?这将

我正在编写一个桌面应用程序,它需要对服务器上随时可能发生的更改做出响应,并且我希望该应用程序在计算机登录时始终运行。是否有一种方法被认为是最标准的,或者应该避免的方法?我考虑过的几种解决方案是:

  • 每秒向服务器发送两次请求(这大约是我想要的响应时间)
  • 打开websockets连接,以便只有一个开放的管道供服务器写入
如果服务器只是在没有数据时返回错误或短消息,那么使用第一个选项是否不好?这会影响网络上的其他网络活动吗


提前谢谢

如果服务器知道何时有可用的更新,那么最好通知您的桌面应用程序?这将避免不必要的投票


在任何情况下,我都可能有一个单独的线程专门与服务器通信,并且(在锁定信号量之后)在更新可用时更新主线程正在使用的一些全局变量。

正如Mark Setchell所说,避免不必要的轮询

WebSocket不仅仅适用于浏览器。桌面应用程序也可以使用WebSocket。如果应用程序通过WebSocket与服务器建立连接,那么它可以异步接收数据或事件。没有投票

现在,您的桌面应用程序可以坐在那里,无论何时从服务器接收到事件或数据,它都可以执行您想要的任何操作

但是,如果不在客户端上启动服务器并打开客户端防火墙以进行传入连接,我将如何通知桌面客户端


以这种方式使用WebSocket还可以防止您的客户端在其防火墙中打开入站端口,因为他们是启动(出站)连接的人。

谢谢!这正是我想做的!但是,如果不启动客户端上的服务器并打开客户端的防火墙进行传入连接,我将如何通知桌面客户端呢;这正是我想要的!!还有一个小问题:一旦我与服务器建立了websocket连接,在我显式发送数据之前(无论是从客户端还是服务器),绝对不会交换数据,对吗?保持连接活动不需要少量开销数据?正确。数据只在客户端发送某些内容或服务器发送某些内容时才遍历连接。请注意,这适用于WebSocket层及以上。在底层,TCP可能正在进行一些来回通信,但这不会出现在您的应用程序中。实际上,如果防火墙或代理等中介在某一段时间内未检测到任何活动,它们可能会终止空闲连接。因此,您可能会发现通过WebSocket连接定期发送消息很有用,这样看起来就有活动了。WebSocket协议也可以使用乒乓球。