我正在尝试使用 Java 连接到 StreamLabs 套接字 API。 API 网址是
https://sockets.streamlabs.com?token=<socketToken>
这不起作用,因为 Java 期望套接字是
ws://...
。当我将其更改为“ws”格式时,它会出现连接超时。
我错过了什么吗?这实际上不是一个 websocket,如果不是它会如何工作?
这里是他们文档的链接:https://streamlabs.readme.io/docs/socket-api
更多信息:我尝试过
org.asynchttpclient.ws.WebSocket
和 javax.websocket
都不起作用
使用SocketIo解决
<dependency>
<groupId>io.socket</groupId>
<artifactId>socket.io-client</artifactId>
<version>1.0.0</version>
</dependency>
他们的套接字文档肯定缺乏,您将连接到的实际 websocket url 是
wss://sockets.streamlabs.com/socket.io/?token=<your_socket_api_token>&transport=websocket
此外,由于没有在任何地方真正提到它,所以他们使用一个整数,添加到消息前面,作为消息类型指示符。
0
是init消息类型,包含心跳间隔和超时时间40
是您将发送和接收的 ping 消息41
是使用无效令牌连接后您将收到的无效令牌消息42
将是您将收到的实际 Streamlabs 事件消息至少这是我到目前为止通过四处探索所收集到的。
我设法使用 java springframework 的
WebSocketConnectionManager
和 StandardWebSocketClient
使其工作。
我使用了另一个答案中描述的网址'wss://sockets.streamlabs.com/socket.io/?token=<your_socket_api_token>&transport=websocket'
。
但是使用这种方法,您必须手动设置心跳以确保连接不会关闭。心跳是一条有效负载为“
2
”的文本消息,您会收到一条有效负载为“3
”的消息作为答案。我通过查看 Streamlabs 文档中示例 javascript 应用程序的网络检查器获得了这些信息。