5

它说流关闭错误

public class StreamAPI {

    public static void main(String[] args) {


        ConfigurationBuilder cb = new ConfigurationBuilder();
        cb.setDebugEnabled(true);
        cb.setOAuthConsumerKey("xxxx");
        cb.setOAuthConsumerSecret("xxx");
        cb.setOAuthAccessToken("xx-xx");
        cb.setOAuthAccessTokenSecret("xxx");
        cb.setUseSSL(true);
        cb.setUserStreamRepliesAllEnabled(true);


        TwitterStream twitterStream = new TwitterStreamFactory(cb.build()).getInstance();

        AccessToken accestoken = new AccessToken("xx-xx", "xxx");

        twitterStream.setOAuthAccessToken(accestoken);
        StatusListener listener = new StatusListener() {

            public void onStatus(Status status) {
                System.out.println("@" + status.getUser().getScreenName() + " - " + status.getText());
            }

            public void onDeletionNotice(StatusDeletionNotice statusDeletionNotice) {
                System.out.println("Got a status deletion notice id:" + statusDeletionNotice.getStatusId());
            }

            public void onTrackLimitationNotice(int numberOfLimitedStatuses) {
                System.out.println("Got track limitation notice:" + numberOfLimitedStatuses);
            }

            public void onScrubGeo(long userId, long upToStatusId) {
                System.out.println("Got scrub_geo event userId:" + userId + " upToStatusId:" + upToStatusId);
            }

            @Override
            public void onStallWarning(StallWarning stallWarning) {
                //To change body of implemented methods use File | Settings | File Templates.
            }

            public void onException(Exception ex) {
                ex.printStackTrace();
            }
        };

        FilterQuery fq = new FilterQuery();
        String keywords[] = {"France", "Germany"};

        fq.track(keywords);

        twitterStream.addListener(listener);
        twitterStream.filter(fq);

    }

}

我收到错误

   Stream closed.
Relevant discussions can be found on the Internet at:
    http://www.google.co.jp/search?q=a8fd061d or
    http://www.google.co.jp/search?q=00070a0c
TwitterException{exceptionCode=[a8fd061d-00070a0c a8fd061d-0007099d], statusCode=-1, message=null, code=-1, retryAfter=-1, rateLimitStatus=null, version=3.0.3}
    at twitter4j.StatusStreamBase.handleNextElement(StatusStreamBase.java:199)
    at twitter4j.StatusStreamImpl.next(StatusStreamImpl.java:57)
    at twitter4j.TwitterStreamImpl$TwitterStreamConsumer.run(TwitterStreamImpl.java:478)
Caused by: java.io.IOException: the end of the stream has been reached
    at twitter4j.StatusStreamBase.handleNextElement(StatusStreamBase.java:88)
    ... 2 more

但相同的配置适用于 TwitterAPI

4

1 回答 1

5

Twitter 给出了以下您可能会断开连接的原因

  • 客户端使用相同的凭据建立了太多连接。发生这种情况时,最早的连接将被终止。这意味着您必须小心不要使用相同的凭据并行运行两个重新连接的客户端,否则它们将轮流相互断开连接。
  • 客户端突然停止读取数据。如果从流中读取推文的速率突然下降,则连接将被关闭。
  • 客户端读取数据太慢。每个流连接都由要发送到客户端的消息队列支持。如果这个队列随着时间的推移变得太大,连接将被关闭。
  • 流媒体服务器重新启动。这通常与代码部署有关,并且不是很频繁。
  • Twitter 的网络配置发生变化。这些事件极为罕见,例如,代表负载均衡器重新启动或网络重新配置。

您应该会收到有关断开连接原因的信息,但并非总是如此

流可能会因各种原因而关闭。流式传输 API 将尝试传递一条消息,指示流关闭的原因。请注意,如果断开连接是由于网络问题或客户端读取速度太慢,则可能不会收到此消息。

我的想法是,也许您读取数据的速度不够快——尽管我不能肯定地说。尝试实施onStallWarning以查看是否收到任何停顿警告,例如:

@Override
public void onStallWarning(StallWarning stallWarning) {
    System.out.println(stallWarning);
}
于 2013-06-27T08:13:14.773 回答