Gré*_*rel 8 java fallback long-polling websocket socket.io
我想WebSocket用Java.问题是,我的服务器通过无法配置的代理与客户端分离.我一直在寻找WebSocket具有后备的实现,例如long-polling.我发现socket.io但不知道后备是如何工作的.
在哪种情况下,它取代WebSocket和如何?
是否有其他库,如socket.io与回退实现?我想找到一个Java,但我只找到了Jetty.
编辑:回退只取决于浏览器与WebSocket的兼容性吗?如果失败的原因是代理配置错误,那么socket.io会将其检测为兼容性故障,从而切换到长轮询(或其他技术)?
答:从v1开始,socket.io包含engine.io,它带来了以下功能:
arn*_*old 10
Socket.io是websockets协议的几个实现之一,它的主要卖点(IMO)易于使用:您不需要编写保持活动机制或决定哪种传输最好,它是为您做的.
所以,为了说清楚,socket.io不会取代websocket协议,它是一个为你实现它的包.
你提到了长轮询.这是socket.io使用的传输之一.Long Polling是基于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<Transport> 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
Run Code Online (Sandbox Code Playgroud)
完整的代码可以在这里找到.
Node JS也有用于websockets的库,我在这里提到它只是为了澄清长轮询和websockets不是唯一的两个可用传输(可能是Java中唯一的传输):
io.set('transports', [ // enable all transports (optional if you want flashsocket)
'websocket'
, 'flashsocket'
, 'htmlfile'
, 'xhr-polling'
, 'jsonp-polling'
]);
Run Code Online (Sandbox Code Playgroud)
简而言之,socket.io试图为您提供尽可能简单的操作,包括不必担心要使用什么传输,因为它是为您完成的,但如果您愿意,仍然可以配置.
我希望这个简短的解释可以帮到你!
| 归档时间: |
|
| 查看次数: |
8043 次 |
| 最近记录: |