2

试图在应用程序中实现这一点。Slack RTM 调用 rtm.start 后,我​​得到 JSON 响应并提取 wss url。之后,按照文档我需要打开 websocket。尝试了两个库

compile 'com.koushikdutta.async:androidasync:2.+'
compile 'org.java-websocket:Java-WebSocket:1.3.0'

首先给出 TimeoutException,其次 - 使用 i = -1, b = true 进入 onClose 方法(不调用 onError 或 onOpen,请参见下面的代码)。

connection = (HttpURLConnection) new URL(getQuery(URL + "rtm.start",
                                new Pair<>("token", TOKEN))).openConnection();
final String response = readIs(connection.getInputStream());
JSONObject jResponse = new JSONObject(response); 
String uri = (String) jResponse.get("url"); 

使用 Java-WebSocket 我已经尝试过这段代码(来自 github 上的示例的标准):

connectWebSocket(uri);

private void connectWebSocket(String uriStr) {
        URI uri;
        try {
            uri = new URI(uriStr);
        } catch (URISyntaxException e) {
            e.printStackTrace();
            return;
        }
        log(uri.toString());
        log(uri.toASCIIString());

        mWebSocketClient = new WebSocketClient(uri) {
            @Override
            public void onOpen(ServerHandshake serverHandshake) {
                log("Opened");
                mWebSocketClient.send("Hello from " + Build.MANUFACTURER + " " + Build.MODEL);
            }

            @Override
            public void onMessage(String s) {
                log(s);
            }

            @Override
            public void onClose(int i, String s, boolean b) {
                log("Closed " + s + " " + b + " number: " + i);
            }

            @Override
            public void onError(Exception e) {
                log("Error " + e.getMessage());
            }
        };
        mWebSocketClient.connect();
    }

正如我上面所说 - 只有 onClose 被调用。

使用 AndroidAsync 也尝试了示例中的标准代码:

AsyncHttpClient.getDefaultInstance().websocket(uri, "wss", (ex, webSocket) -> {
        if (ex != null) {
            log(ex.getMessage());
            return;
        }
        webSocket.send("a string");
});

我以前从未在 android 上使用过 websockets,并且无法理解我做错了什么。将感谢您的帮助。

JSON 中的 URL 的类型为

wss://ms156.slack-msgs.com/websocket/LYBUMUtG-bqj9HkKwEB5Yk_DCyPeRbnZ4viUJYHzrzJnLr-M74d46IQ9khTF8rik-v6ckJ4hqXPRi666hyPR6pismYBZBsggJUade3LOARc=
4

1 回答 1

2

最后,我的同事设法使用 OkHttp 打开了这个套接字。如果有人感兴趣 - 下面提供了测试项目的代码:http: //pastebin.com/3YhLjAn7 有趣的是 - 最后我们决定不使用 RTM,因为一个连接的负载太高 - 你会收到来自所有人的事件聊天,没有办法只为一个特定的设置过滤器。

于 2015-08-24T21:56:19.673 回答