Java EE Websocket: Как отправлять и отправлять данные без получения сообщения?

1

Что я хочу?
Я пытаюсь написать приложение, в котором клиент отправляет запрос и на основе сервера запросов получает твиттер-поток и нажимает на клиента.

Что у меня есть?
У меня есть простая структура, где клиент может подключиться к серверу, а сервер отвечает

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-отправки клиенту?

Теги:
websocket
java-ee
twitter
java-ee-7

1 ответ

0

Это сработало для меня

@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++;
        }
    }
}

Спасибо Аруну Гупте за помощь в его твитах :)

  • 0
    пожалуйста, убедитесь, что вы поместили блок try-catch ВНУТРИ цикла - вы не хотите пропускать другой подключенный сеанс, если он по какой-то причине прерван.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню