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

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

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

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

【问题讨论】:

    标签: android node.js socket.io socket.io-1.0 socket.io-java-client


    【解决方案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 与文档相同。

    【讨论】:

      猜你喜欢
      • 2012-07-25
      • 2014-04-25
      • 2016-07-09
      • 2017-12-14
      • 1970-01-01
      • 1970-01-01
      • 2011-08-14
      • 2013-04-06
      • 2010-11-08
      相关资源
      最近更新 更多