Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaEEWebSocket:如何在不接收消息的情况下继续发送数据?_Java_Jakarta Ee_Twitter_Websocket_Java Ee 7 - Fatal编程技术网

JavaEEWebSocket:如何在不接收消息的情况下继续发送数据?

JavaEEWebSocket:如何在不接收消息的情况下继续发送数据?,java,jakarta-ee,twitter,websocket,java-ee-7,Java,Jakarta Ee,Twitter,Websocket,Java Ee 7,我想要什么? 我正在尝试编写一个应用程序,其中客户端发送一个查询,并基于查询服务器获取twitter流并推送到客户端 我有什么? 我有一个简单的结构,客户机可以连接到服务器,服务器会做出响应 TweetStreamServer package com.self.tweetstream; import javax.websocket.OnMessage; import javax.websocket.server.ServerEndpoint; @ServerEndpoint("/tweets

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

我有什么?
我有一个简单的结构,客户机可以连接到服务器,服务器会做出响应

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;
    }
}
@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();
    }
}
@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);
    }
TweetStreamClient

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;
    }
}
@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();
    }
}
@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);
    }
TweetStreamTest

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;
    }
}
@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();
    }
}
@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的未来数据发送到客户端?

这对我来说很有效

@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++;
        }
    }
}
@OnMessage
公共void tweets(最终字符串消息,会话客户端)引发IOException、InterruptedException{
int i=0;
对于(会话对等方:client.getOpenSessions()){
而(i<10){
System.out.println(“发送…”);
peer.getBasicRemote().sendText(“你好”);
《睡眠》(2000年);
i++;
}
}
}

感谢通过他的推文提供帮助:)

请确保将try-catch块放在循环中-当一个会话因某种原因中断时,您不想跳过其他连接的会话。