如何一致地确定socket.io中的传输类型(版本>;=1.3)

如何一致地确定socket.io中的传输类型(版本>;=1.3),socket.io,socket.io-1.0,Socket.io,Socket.io 1.0,这个问题一直存在,但答案不再正确。我想在运行时确定传输类型——如果我有ws连接,我将通过websocket路由我的REST请求,如果我正在轮询,我将执行老式的http请求 我可以在客户机中测试io().socket.io.engine.transport.constructor.name,这是可行的(我得到WS或XHR,因为它们是构造函数名称),但这感觉非常脆弱。如果有一个标准的方法可以做到这一点,那就太棒了。socket.io.engine.transport.name稍微短一点。您还可以测试

这个问题一直存在,但答案不再正确。我想在运行时确定传输类型——如果我有ws连接,我将通过websocket路由我的REST请求,如果我正在轮询,我将执行老式的http请求


我可以在客户机中测试
io().socket.io.engine.transport.constructor.name
,这是可行的(我得到WS或XHR,因为它们是构造函数名称),但这感觉非常脆弱。如果有一个标准的方法可以做到这一点,那就太棒了。

socket.io.engine.transport.name稍微短一点。您还可以测试transport.ws是否不为null:if(socket.io.engine.transport.ws)wsfunc(…)else xhrfunc(…)。我不完全理解为什么您需要在客户端中使用这些信息,因为socket.io以相同的方式处理websocket和xhr连接。嗯,
if(transport.ws)
似乎比依赖用于传输的类名要好得多(后者可能会在以后的版本中更改)。至于用例,通常我会通过webapp另一部分的https连接加载
/api/items/1
/api/others/1
等等。将这些请求连接到websocket意味着每个请求上没有TLS握手开销(基本上是一个janky-SPDY优化)。如果WS不存在,那么将普通http请求用于api端点,而将socket.io用于服务器推送实时,效率会更高。