【发布时间】:2016-04-10 05:43:19
【问题描述】:
我正在尝试使用Java-Websocket library by TooTallNate 创建一个从coinbase exchange websocket stream 接收消息的websocket 客户端。由于 Python 中的并行化瓶颈,我正在将我用 Python 制作的程序移植到 Java,并且据我所知,我在 Java 中做的事情与在 Python 中做的事情相同。这是我使用 this websocket lib 在 Python 中打开连接的代码(按预期工作):
ws = websocket.create_connection("wss://ws-feed.exchange.coinbase.com", 20)
ws.send(json.dumps({
"type": "subscribe",
"product_id": "BTC-USD"
}))
这是我的整个 Java 类:
public class CoinbaseWebsocketClient extends WebSocketClient {
private final Gson gson = new Gson();
private CoinbaseWebsocketClient(URI serverURI) {
super(serverURI, new Draft_17());
connect();
}
private static URI uri;
private static CoinbaseWebsocketClient coinbaseWebsocketClient;
static {
try {
uri = new URI("wss://ws-feed.exchange.coinbase.com");
} catch (URISyntaxException e) {
e.printStackTrace();
}
}
protected static CoinbaseWebsocketClient get() {
if (coinbaseWebsocketClient == null) {
coinbaseWebsocketClient = new CoinbaseWebsocketClient(uri);
}
return coinbaseWebsocketClient;
}
@Override
public void onOpen(ServerHandshake serverHandshake) {
System.out.println("Websocket open");
final JsonObject btcUSD_Request = new JsonObject();
btcUSD_Request.addProperty("type", "subscribe");
btcUSD_Request.addProperty("product_id", "BTC_USD");
final String requestString = gson.toJson(btcUSD_Request);
send(requestString);
}
@Override
public void onMessage(String s) {
System.out.println("Message received: " + s);
}
@Override
public void onClose(int code, String reason, boolean remote) {
System.out.println("Websocket closed: " + reason);
}
@Override
public void onError(Exception e) {
System.err.println("an error occurred:" + e);
}
}
我知道我的 Java 代码没有完全根本的问题,因为当我使用 ws://echo.websocket.org 而不是 wss://ws-feed.exchange.coinbase 作为 URI 时,它可以按预期工作.com。但是,当我尝试连接到 wss://ws-feed.exchange.coinbase.com 时,我收到此错误:
Websocket closed: draft org.java_websocket.drafts.Draft_17@7ca2fefb refuses handshake
据我所知,此连接没有任何身份验证或类似的东西(我没有在我的 Python 程序中提供任何身份验证),所以我不知道这个错误的根源是什么。
【问题讨论】:
-
您是否尝试将 SocketFactory 设置为接受所有 SSL 证书?这就是我(hackily)解决我的 wss 问题的方式
标签: java websocket java-websocket