如何使用socket.io进行后备工作?

我想将WebSocketJava一起使用。 问题是,我的服务器通过无法配置的代理与客户端分离。 我一直在寻找具有后退function的WebSocket实现,例如long-polling 。 我找到了socket.io但不知道后备是如何工作的。

在哪种情况下它取代WebSocket以及如何?

是否有其他库,如socket.io与回退实现? 我想在Java找到一个,但我只找到了Jetty

编辑:回退只取决于浏览器与WebSocket的兼容性吗? 如果失败的原因是代理配置错误,那么socket.io会将其检测为兼容性故障,从而切换到长轮询(或其他技术)?

答:从v1开始,socket.io包含engine.io ,它带来了以下function:

在此处输入图像描述

Socket.io是websockets协议的几个实现之一,它的主要卖点(IMO)易于使用:您不需要编写保持活动机制或决定哪种传输最佳,它是为您做的。

所以,为了说清楚,socket.io不会取代websocket协议,它是一个为你实现它的包。

你提到了长轮询。 这是socket.io使用的传输之一。 长轮询是基于HTTP的,它基本上是请求 – >等待 – >响应并且等待时间不是很长,因为它可以被EOF上的负载平衡器或过时连接丢弃。 然而,当websockets协议(基于TCP)不可用时,它仍然有用,socket.io会自动为您重新建立连接。 请注意,websockets是一个相对较新的协议,于2011年批准,因此旧版浏览器不支持它。 好吧,socket.io检测到然后转向长轮询,所以你不必“担心”它。

websocket连接以HTTP开头,在同一端口上侦听。 例如, http:// localhost:8080 (只是一个愚蠢的例子)。 然后,当可能的时候,socket.io会为你切换到ws:// localhost:8080。

在使用socket.io时,我从未遇到网络拓扑挑战的问题,因为当HTTP端口可用并且使用长轮询/ websockets时,它对我来说很有用。

正如您所提到的,其中一个具有回退实现的库是netty-socket.io。 请注意它如何配置两个传输:

 public class Configuration { private ExceptionListener exceptionListener = new DefaultExceptionListener(); private String context = "/socket.io"; private List transports = Arrays.asList(Transport.WEBSOCKET, Transport.POLLING); private int bossThreads = 0; // 0 = current_processors_amount * 2 private int workerThreads = 0; // 0 = current_processors_amount * 2 

完整的代码可以在这里找到。

Node JS还有用于websockets的库,我在这里提到它只是为了澄清长轮询和websockets不是唯一的两个可用传输(可能是Java中唯一的传输):

 io.set('transports', [ // enable all transports (optional if you want flashsocket) 'websocket' , 'flashsocket' , 'htmlfile' , 'xhr-polling' , 'jsonp-polling' ]); 

简而言之,socket.io试图为您提供尽可能简单的操作,包括不必担心要使用什么传输,因为它是为您完成的,但如果您愿意,仍然可以配置。

我希望这个简短的解释可以帮到你!

Interesting Posts