我是 Android 移动应用游戏的开发者。该应用使用两者HTTPs
并WebSocket
连接到同一服务器。该应用已上线,对大多数用户来说运行良好。
有一位用户说他的应用程序无法使用。我能够获取日志并看到用户通过移动蜂窝网络通过 HTTPs 连接连接到服务器,没有任何问题,但与同一服务器/端口的套接字连接失败。连接到套接字时出现错误:
Failed to connect to 'api.mafia-game.net:443': failed to connect to api.mafia-game.net/161.97.93.23 (port 443) from /:: (port 41656): connect failed: ETIMEDOUT (Connection timed out)
Failed to connect to 'api.mafia-game.net:443': failed to connect to api.mafia-game.net/161.97.93.23 (port 443) from /:: (port 41658): connect failed: ETIMEDOUT (Connection timed out)
Failed to connect to 'api.mafia-game.net:443': failed to connect to api.mafia-game.net/161.97.93.23 (port 443) from /:: (port 41660): connect failed: ETIMEDOUT (Connection timed out)
从此日志中,我看到套接字每次都超时,并且应用程序每次都尝试使用不同的本地端口。我还看到 IP 解析正确并且使用了 IPv4。
我了解用户无法连接是因为他的网络存在某些问题(例如端口关闭等)。
我的问题:为什么套接字连接不起作用,但 HTTPs 连接在同一服务器和端口(443)上运行良好?
我知道服务器上的套接字实现是正确的,因为它适用于大多数用户。另外,据我所知,服务器没有拒绝连接,但连接只是超时了,就像用户无法收到回复一样。
为了建立套接字连接,我使用了 Java 库com.neovisionaries.ws.client
。