Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [jetty-dev] SDPY client gets overwhelmed when subscribing to high volume incoming messages

Hi Abhinav,

I didn't have a detailed look at your code yet, but I'd highly recommend to upgrade to Jetty 9 and try that again first. Jetty 7/8 are stable and get bugfixes only. New SPDY features will only make it into Jetty 9 and there's quite some improvements in 9 which are missing in 7. So if you use SPDY, please upgrade to 9.

Cheers,
Thomas

Am 1/28/13 3:15 AM, schrieb Abhinav Rajan:
Hello,
Please find below a sample subscriber and a publisher. The subscriber
becomes unresponsive and stops subscribing to messages after the count
crosses two hundred thousand. Could you please let me know what I am
doing wrong,

OS: MAC

VMArgs:
-Djava.nio.channels.spi.SelectorProvider=sun.nio.ch.KQueueSelectorProvider
-Xbootclasspath/p:/Users/abhinavsunderrajan/.m2/repository/org/mortbay/jetty/npn/npn-boot/7.6.2.v20120308/npn-boot-7.6.2.v20120308.jar



************************ PUBLISHER
*********************************************************************

import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;

import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.spdy.SPDYServerConnector;
import org.eclipse.jetty.spdy.api.DataInfo;
import org.eclipse.jetty.spdy.api.ReplyInfo;
import org.eclipse.jetty.spdy.api.Stream;
import org.eclipse.jetty.spdy.api.StreamFrameListener;
import org.eclipse.jetty.spdy.api.StringDataInfo;
import org.eclipse.jetty.spdy.api.SynInfo;
import org.eclipse.jetty.spdy.api.server.ServerSessionFrameListener;

public class TestServer {

    /**
     * Main method.
     * @param args
     * @throws Exception
     */
    public static void main(final String[] args) throws Exception {
       System.setProperty("Djavax.net.debug", "all");

       startTLSServer();
    }

    private static void startTLSServer() throws Exception {
       // Frame listener that handles the communication over speedy
       ServerSessionFrameListener frameListener = new
ServerSessionFrameListener.Adapter() {

          /**
           * As soon as we receive a syninfo we return the handler for
the stream
           * on this session
           */
          @Override
          public StreamFrameListener onSyn(final Stream stream,
                final SynInfo synInfo) {
             System.out.println("onSyn");

             // Send a reply to this message
             stream.reply(new ReplyInfo(false));

             // and start a timer that sends a request to this stream
every 5
             // seconds
             ScheduledExecutorService executor = Executors
                   .newSingleThreadScheduledExecutor();
             Runnable periodicTask = new Runnable() {
                private int i = 0;

                public void run() {
                   stream.data(new StringDataInfo(System.currentTimeMillis()
                         + ", some data from the server, " + i++, false));
                }
             };
             executor.scheduleAtFixedRate(periodicTask, 0, 1,
                   TimeUnit.MICROSECONDS);

             // Next create an adapter to further handle the client
input from
             // specific stream.
             return new StreamFrameListener.Adapter() {

                /**
                 * We're only interested in the data, not the headers in
this
                 * example
                 */
                public void onData(final Stream stream, final DataInfo
dataInfo) {
                   String clientData = dataInfo.asString("UTF-8", true);
                   System.out.println("Received the following client data: "
                         + clientData);
                }
             };
          }
       };



       // Wire up and start the connector
       Server server = new Server();
       SPDYServerConnector connector = new
SPDYServerConnector(frameListener);
       connector.setPort(5082);
       server.addConnector(connector);

       server.start();
       server.join();
    }
}




***********************  SPDY SUBSCRIBER***********************



import java.net.InetSocketAddress;
import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;

import org.eclipse.jetty.spdy.SPDYClient;
import org.eclipse.jetty.spdy.api.DataInfo;
import org.eclipse.jetty.spdy.api.SPDY;
import org.eclipse.jetty.spdy.api.Session;
import org.eclipse.jetty.spdy.api.Stream;
import org.eclipse.jetty.spdy.api.StreamFrameListener;
import org.eclipse.jetty.spdy.api.StringDataInfo;
import org.eclipse.jetty.spdy.api.SynInfo;

/**
  * Put
<code>-Xbootclasspath/p:lib/spdy/npn-boot-7.6.2.v20120308.jar</code> as
  * vmarg.
  */
public class TestClient {

    /**
     * Main method.
     * @param args
     * @throws Exception
     */
    public static void main(final String[] args) throws Exception {

       // create client
       SPDYClient.Factory clientFactory = new SPDYClient.Factory();
       clientFactory.start();
       SPDYClient client = clientFactory.newSPDYClient(SPDY.V2);

       // create a session to the server running on localhost port 8181
       Future<Session> future = client.connect(new InetSocketAddress(
             "localhost", 5082), null);

       Session session = future.get(5, TimeUnit.SECONDS);

       // this listener receives data from the server and prints it
       StreamFrameListener streamListener = new
StreamFrameListener.Adapter() {
          public void onData(final Stream stream, final DataInfo dataInfo) {
             // Data received from server
             String content = dataInfo.asString("UTF-8", true);
             System.out.println("SPDY content: " + content);
          }
       };

       // Start a new session, and configure the stream listener
       final Stream stream = session.syn(new SynInfo(false), streamListener)
             .get(5, TimeUnit.SECONDS);
       stream.data(new StringDataInfo("hello publisher!!", false));
    }
}


Many thanks,
Abhinav






_______________________________________________
jetty-dev mailing list
jetty-dev@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/jetty-dev




Back to the top