当前位置: 首页 > 知识库问答 >
问题:

socket.io什么时候使用轮询而不是WebSocket?

魏硕
2023-03-14

我是socket.io的新手,已经用node/express/socket.io编写了我的第一个应用程序。我想向公众发布我的应用程序,但我担心它对很多人都不起作用。我有几个朋友测试了我的应用程序,一切都很顺利(这是一个非常简单的应用程序)。我担心的是:现在每个连接似乎都在使用websockets,这正是我想要的。但是,我的应用程序有时会因为客户端的一些奇怪的事情而降级为“投票”吗?如果是,socket.io如何决定何时使用html" target="_blank">轮询,何时使用websocket(是基于浏览器/版本还是连接还是什么)?我很确定它在可能的情况下使用websocket,但是是否有一个条件列表将它归结为“轮询”呢?此外,有没有一种方法可以通过使用“轮询”来测试我的应用程序,看看它是否工作?

我可以发布代码,但我认为这是一个关于如何套接字的一般问题。io工作。

共有1个答案

隗昀
2023-03-14

客户端降级到ajax轮询的唯一时间(假设您的服务器确实支持它,它确实支持它)是当浏览器客户端不支持webSocket时(例如,一个非常旧的客户端),或者如果客户端路径中的某些代理不支持webSocket。

IE10和其他浏览器的所有最新版本都支持webSockets。

因此,实际上,它实际上只是IE8或IE9或行为不良的代理,您可能看不到客户端webSocket支持。

没有其他条件(除了缺乏支持)会将连接“击倒”到轮询。

可以通过仅在从客户端连接时传入 xhr-polling 传输选项来临时使用轮询测试应用程序,以告知客户端这是唯一允许的传输选项。

请记住,所有webSocket连接都以HTTP请求开始,然后如果双方同意,该请求将“升级”到webSocket协议,因此如果您从浏览器查看网络跟踪,您应该会看到每个webSocket连接都以HTTP请求开始——这很正常。而且,在最新版本的socket.io中,它实际上可能会在成功尝试并切换到实际的webSocket之前与轮询传输交换一些数据包。

 类似资料:
  • 问题内容: 我是一名C ++程序员,偶尔使用MySQL处理数据库,但是我的SQL知识非常有限。但是,我当然愿意改变这一点。 目前,我正尝试仅通过SQL查询对数据库中的数据进行分析(!)。但是我将放弃,而是将数据导入C 并使用C 代码进行分析。 我已经与同事讨论了这一点,他们也促使我使用C ++,他说SQL并不是用于复杂的分析,而是主要用于导入(从现有表中)和导出(到新表中)数据,还有更多内容。例如

  • 我被要求评估RabbitMQ而不是Kafka,但我发现很难找到一种比Kafka更适合消息队列的情况。有人知道消息队列在吞吐量、持久性、延迟或易用性方面更适合的用例吗?

  • 问题内容: 我怎么能说: 为什么函数调用中不需要括号,而最后一行呢? 问题答案: 是一个功能 调用该函数并产生该函数返回的任何值。 setTimeout的目的是在一段时间后运行代码。你需要的功能只是传递给它(这样的setTimeout可以自称在适当的时候函数),因为如果你将它传递给setTimeout的前调用的函数(用括号),将执行 现在 而不是1秒后,。

  • 问题内容: 奇怪的是: 似乎或多或少被定义为。通过这种方式很容易产生错误: 一些fname意外地以else块结尾。修复很简单,我们应该改用它,但是从表面上看,这似乎是一种不错的pythonic方式,并且比“正确”的方式更具可读性。 由于字符串是不可变的,所以为什么字符串错误是什么技术细节?什么时候进行身份检查更好,什么时候进行平等检查更好? 问题答案: 据我所知,检查对象身份是否相等。由于没有强制

  • 我遇到了新的列表实现,称为GlueList 我想知道什么时候应该使用ArrayList或LinkedList。

  • 问题内容: 我习惯于进行Java编程,在编程时,您无需真正考虑指针。但是,此刻我正在用C ++编写程序。在创建具有其他类成员的类时,何时应该使用指针,何时不应该使用指针?例如,什么时候我想这样做: 与此相反: 问题答案: 首先避免指针。 在以下情况下使用它们: 您想使用Pimpl习惯用法或抽象工厂。 该实例实际上是由程序的其他部分管理的,而该类仅需要能够访问它。 您想推迟对象的构建(即,您想 在