【问题标题】:Java EE Websocket: How to send keep sending data without receiving message?Java EE Websocket:如何在不接收消息的情况下继续发送数据?
【发布时间】:2014-07-11 17:19:02
【问题描述】:

我想要什么?
我正在尝试编写一个应用程序,其中客户端发送查询并基于查询服务器获取 twitter-stream 并推送到客户端。

我有什么?
我有一个简单的结构,客户端可以连接到服务器并且服务器响应

TweetStreamServer

package com.self.tweetstream;

import javax.websocket.OnMessage;
import javax.websocket.server.ServerEndpoint;

@ServerEndpoint("/tweets")
public class TweetStreamServer {
    @OnMessage
    public String tweets(final String message) {
        return message;
    }
}

TweetStreamClient

@ClientEndpoint
public class TweetStreamClient {
    public static CountDownLatch latch;
    public static String response;

    @OnOpen
    public void onOpen(Session session) {
        try{
            session.getBasicRemote().sendText("Hello World!");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    @OnMessage
    public void printTweets(final String tweet) {
        System.out.println("Tweet:" + tweet);
        response = tweet;
        latch.countDown();
    }
}

TweetStreamTest

@Test
    public void test() throws URISyntaxException, IOException, DeploymentException, InterruptedException {
        System.out.println("URI: " + getEndpointUrl());
        TweetStreamClient.latch = new CountDownLatch(1);
        Session session = connectToServer(TweetStreamClient.class, "tweets");
        assertNotNull(session);
        assertTrue(TweetStreamClient.latch.await(10, TimeUnit.SECONDS));
        assertEquals("Hello World!", TweetStreamClient.response);
    }

问题
我很困惑我现在如何发送从 Twitter 收到的连续推文,因为我的服务器方法按照 API 是

       @OnMessage
        public String tweets(final String message) {
            return message;
        }  

这意味着它需要一条消息才能返回任何东西。

如何将来自 Twitter 的即将到来的数据发送到客户端?

【问题讨论】:

    标签: java jakarta-ee twitter websocket java-ee-7


    【解决方案1】:

    这对我有用

    @OnMessage
    public void tweets(final String message, Session client) throws IOException, InterruptedException {
        int i = 0;
        for (Session peer : client.getOpenSessions()) {
            while (i < 10) {
                System.out.println("sending ...");
                peer.getBasicRemote().sendText("Hello");
                Thread.sleep(2000);
                i++;
            }
        }
    }
    

    感谢 Arun Gupta 在他的推文中提供帮助 :)

    【讨论】:

    • 请确保将 try-catch 块放在循环中 - 当某个会话因某种原因中断时,您不想跳过其他连接的会话。
    猜你喜欢
    • 1970-01-01
    • 2011-11-30
    • 2021-03-06
    • 2015-04-25
    • 1970-01-01
    • 1970-01-01
    • 2022-11-17
    • 1970-01-01
    • 2018-04-11
    相关资源
    最近更新 更多