android - WebSocket - 状态码 403 和状态消息 - 禁止
问题描述
我正在使用 Apprtc.Follow 下面提到的库开发视频通话应用程序。
当我将 url 更改为我的自定义服务器而不是 apprtc 服务器时,视频通话会在 1 分钟后断开连接。我失去了与服务器的连接。
为了避免与服务器的连接丢失,我们需要每隔大约 30 秒定期 ping 服务器。
但上面提到的 AppRTC 项目正在使用 jar 文件(autobanh.jar)来连接 websocket,但在库中 sendPing mentod 是私有的,因此无法访问。
问题 1 -没有办法 ping websocket 服务器。
尝试替换 websocet 库后, 我用下面提到的库更改了 websocket 库
- https://github.com/Koredotcom/android-kore-sdk/tree/master/BotsSDK/korebotsdklib/src/main/java/kore/botssdk/autobahn
- https://github.com/martindale/soundtrack.io-android/tree/master/src/de/tavendo/autobahn
更换 websocket 库后,现在我可以访问 sendPing 方法了。但是在视频通话期间,我仍然在 60 秒后失去了连接。
Ping方法-
public void sendPingMessageToServer() {
try {
WebSocketMessage.Ping ping = new WebSocketMessage.Ping();
// ping.mPayload="ping to server".getBytes();
mWebSocketWriter.sendPing(ping);
} catch (Exception e) {
e.printStackTrace();
}
}
在取消注释 ping.mPayload 行时,我得到 BufferOverflowException。
30秒定时器
private void startConnectionCheckTimer() {
timerInstance.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
try {
ws.sendPingMessageToServer();
} catch (Exception e) {
e.printStackTrace();
}
}
}, 0, 30 * 1000);
}
请建议如何避免 60 秒后通话断开。
解决方案
我已将 websocket 库更改为 https://github.com/crossbario/autobahn-java
该库具有定期自动 ping 到服务器的功能。添加后只修改了一类ApprtcDemo-WebSocketChannelClient
推荐阅读
- python-2.7 - 从云 Lambda 函数调用本地 AWS Lambda 函数
- java - 在属性文件中写入字符串时,如何跳过\?
- google-cloud-platform - 网站未解决
- python - 如何将多行字符串保存在单行中且没有多个空格
- pandas - 如何将 15 分钟和 10 分钟的时间序列数据帧合并为 30 分钟
- xamarin - UrhoSharp 对文档的困惑
- javascript - 如何停止我的html中的示例代码/文本被识别为代码/激活
- ftp - 无需 FTP 将文件发送到网络服务器
- c# - 无法在 MongoDb 集合查询中从 ObjectId 反序列化为 String
- linux - 比较两行