socket.io xhr 在慢速连接上发布错误(3G 移动网络)

Posted

技术标签:

【中文标题】socket.io xhr 在慢速连接上发布错误(3G 移动网络)【英文标题】:socket.io xhr post error on slow connection (3G mobile network) 【发布时间】:2015-08-24 07:20:46 【问题描述】:

当我在 3G 移动网络上测试我的真实聊天应用程序时(互联网连接速度慢), Socket.io 反复断开然后重新连接。我已经记录了原因。 它说"xhr post error" 引发"transport error" 然后断开连接。

请问"xhr post error"是什么意思,连接慢时为什么会出现这个错误,如何解决?

我使用的是socket.io-client.java 0.4.2 版

【问题讨论】:

【参考方案1】:

我认为您应该在客户端设置transports 以使用 websockets。

试试这个:

IO.Options opts = new IO.Options();
opts.transports = new String[]"websocket";
mSocket = IO.socket(SOCKET_SERVER, opts);

更新 另外,尝试将您的客户端库更新到 5.1+。

【讨论】:

但是通过这一行你强制服务器只使用 websocket 并停止其他替代方案。【参考方案2】:

首先将依赖更新为1.0.0

implementation ('io.socket:socket.io-client:1.0.0') 
        // excluding org.json which is provided by android
        exclude group: 'org.json', module: 'json'
 

并使用transport 创建option

val ioOption = IO.Options().apply 
            query = /*..*/
            reconnection = /*..*/
            transports = arrayOf("websocket")
        

然后用那个option创建套接字连接

try 
      socket = IO.socket(baseUrl, ioOption)
      catch (e: URISyntaxException) 
       e.printStackTrace()
     

 socket.connect()

并收听EVENT_RECONNECT_ATTEMPT

socket.on(Socket.EVENT_RECONNECT_ATTEMPT) 
            ioOption.transports = arrayOf("polling", "websocket")

引擎盖下没有任何魔法,只需执行文档所告诉的内容。 Read More

注意:您可以更改适当的transport 名称,这里我使用 websocket 与文档相同。

【讨论】:

以上是关于socket.io xhr 在慢速连接上发布错误(3G 移动网络)的主要内容,如果未能解决你的问题,请参考以下文章

接收错误:xhr 轮询错误 socket.io 客户端反应

连接错误:io.socket.engineio.client.EngineIOException:xhr 轮询错误

连接 socket.io 时由于 xhr poll 错误而出现 connect_error

requests.post 可以在慢速(但不是死)连接上超时吗? [复制]

socket.io 身份验证在第一个连接上不起作用

Socket.IO 客户端在 3g/4g 连接上无法正常工作