是否默认维护websocket连接,而不在移动设备中进行轮询



根据理论,引入了一个websocket来避免轮询,并避免每个请求的HTTP头开销。因此,可以使用websocket实现无轮询延迟的单连接和双向消息。

我的问题是。

1.)如果我正在使用第三方库编程本地移动应用程序(Android/IOS),以建立websocket连接(不使用浏览器)。连接会像浏览器的websocket一样保持吗?

2.)如果移动设备没有维护websocket连接,那么我应该放弃websocket的想法,回到HTTP轮询机制或websocket轮询吗?

3.)移动操作系统真的支持websocket在不轮询的情况下保持连接吗?

4.)websocket是否只为基于PC浏览器的JavaScript应用程序和非移动应用程序设计?

5.)浏览器实际上使用什么技术来维护websocket连接,是浏览器在内部发送乒乓心跳吗?

6.)当使用反向代理技术或URL重写技术(比如NGINX)进行代理时,websocket是否效率低下/几乎不可能?

您可能会发现以下关于websocket的答案很有用。

通常,websocket应由第三方库以与浏览器相同的方式进行维护。

Websocket是一种通过TCP/IP运行的协议,可以在没有浏览器的情况下使用。

这也意味着,每个TCP/IP连接都有相同的限制——这些限制与网络浏览器的限制相同。

例如,如果应用程序失去焦点(关闭或置于后台),则连接将关闭。这是移动操作系统强加的限制的一部分,它可能是为了节省电池寿命而设计的(例如,iOS将关闭任何活动连接以节省电池)。。。根据库的不同,您可能有责任在Wobsocket连接关闭后重新建立它。

记住:大多数移动操作系统(如iOS)都允许您的应用程序注册推送通知服务-以下是苹果关于该服务的信息。在大多数情况下,这是最好的系统,即使应用程序关闭,也可以将数据推送到应用程序。

因此,回答您的问题:

  1. 是的,连接的维护方式类似于浏览器的websocket,具有相同的限制,并假设第三方的库足够成熟。

  2. HTTP拉取可能会比WebSocket消耗更多的资源。因为websocket是可能的,所以最好使用websocket。。。但是,除非您使用实时数据(如股票、体育、游戏等),否则推送通知系统可能是您最好的朋友。

  3. 是的。一个普通的websocket库将使用来自操作系统的IO信号来维护websocket而不进行拉取。

  4. 没有。Websocket是一种协议,通过HTTP连接上的"背负",它实际上有助于绕过许多防火墙和代理问题。它可以(现在)被非PC和非浏览器平台和应用程序以及移动设备使用。

    (我知道,事实上,有些游戏在移动平台上使用网络套接字进行实时游戏)

  5. 浏览器通常不会发送乒乓网络套接字帧。这是服务器应用程序的工作。一些框架(例如,Plezi Ruby web应用程序框架)自动管理乒乓球。其他框架要求你这样做……但这几乎总是服务器端的决定(javascript ping ping在大多数浏览器上都不可用)。

祝你好运!

编辑

你在评论中问了另一个问题-你的连接在1分钟后关闭,你问谁在关闭它。

答案是服务器会自动关闭websocket连接,通常是在它们处于非活动状态一段时间的情况下。

例如,如Heroku的websocket文档:中所述,Heroku在55秒不活动后自动关闭websocket连接

正常的Heroku HTTP路由超时规则适用于WebSocket连接。客户端或服务器都可以通过偶尔在连接上发送ping数据包来防止连接空闲。

所有websocket客户端(浏览器和本机应用程序)都是如此。解决方案是找到一个友好的托管服务器,并让服务器端应用程序每隔45-50秒左右发送一次ping

这种行为实际上是Websocket和HTTP标准的一部分,应该被认为是正常的。Websocket RFC声明:

服务器可以随时关闭WebSocket连接。客户端不应任意关闭WebSocket连接。在任何一种情况下,端点都会按照启动WebSocket关闭握手的过程启动关闭(第7.1.2节)

相关内容

  • 没有找到相关文章

最新更新