首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >松弛实时消息websocket

松弛实时消息websocket
EN

Stack Overflow用户
提问于 2015-07-15 11:53:37
回答 1查看 2.1K关注 0票数 2

试图在应用程序中实现这一点。松弛RTM调用rtm.start后,我得到JSON-响应并提取wss url。之后,下面的文档需要打开websocket。试过两个图书馆

代码语言:javascript
复制
compile 'com.koushikdutta.async:androidasync:2.+'
compile 'org.java-websocket:Java-WebSocket:1.3.0'

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

代码语言:javascript
复制
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"); 

在中,我尝试了以下代码(github上示例中的标准代码):

代码语言:javascript
复制
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也尝试了示例中的标准代码:

代码语言:javascript
复制
AsyncHttpClient.getDefaultInstance().websocket(uri, "wss", (ex, webSocket) -> {
        if (ex != null) {
            log(ex.getMessage());
            return;
        }
        webSocket.send("a string");
});

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

JSON中的Url类型为

代码语言:javascript
复制
wss://ms156.slack-msgs.com/websocket/LYBUMUtG-bqj9HkKwEB5Yk_DCyPeRbnZ4viUJYHzrzJnLr-M74d46IQ9khTF8rik-v6ckJ4hqXPRi666hyPR6pismYBZBsggJUade3LOARc=
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-24 21:56:19

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31429661

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档