You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@mina.apache.org by "Trustin Lee (JIRA)" <ji...@apache.org> on 2007/11/05 02:56:50 UTC

[jira] Commented: (DIRMINA-144) Traffic shaping filter

    [ https://issues.apache.org/jira/browse/DIRMINA-144?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12540121 ] 

Trustin Lee commented on DIRMINA-144:
-------------------------------------

You can test the throughput using the following sample application and netcat (UNIX nc) command:

public class TrafficShapingFilterTest {
    public static void main(String[] args) throws Exception {
        ScheduledExecutorService executor = Executors.newScheduledThreadPool(1);
        
        SocketAcceptor acceptor = new NioSocketAcceptor();
        acceptor.getFilterChain().addLast(
                "traffic", 
                new TrafficShapingFilter(executor, 1024, 1024));
        acceptor.setHandler(new IoHandlerAdapter() {
            @Override
            public void messageReceived(IoSession session, Object message)
                    throws Exception {
                session.write(((IoBuffer) message).duplicate());
            }
            
            @Override
            public void sessionClosed(IoSession session) {
                long currentTime = System.currentTimeMillis();
                System.out.println("elapsedTime: " + (currentTime - session.getCreationTime()));
                System.out.println("readBytes: " + session.getReadBytes());
                System.out.println(
                        "readThroughput: " + session.getReadBytes() * 1000 / (currentTime - session.getCreationTime()));
                System.out.println("writtenBytes: " + session.getWrittenBytes());
                System.out.println(
                        "writeThroughput: " + session.getWrittenBytes() * 1000 / (currentTime - session.getCreationTime()));
            }
        });
        acceptor.setLocalAddress(new InetSocketAddress(8080));
        acceptor.bind();
    }
}


> Traffic shaping filter
> ----------------------
>
>                 Key: DIRMINA-144
>                 URL: https://issues.apache.org/jira/browse/DIRMINA-144
>             Project: MINA
>          Issue Type: New Feature
>          Components: Filter
>            Reporter: Niklas Therning
>            Assignee: Trustin Lee
>            Priority: Minor
>             Fix For: 2.0.0-M1
>
>
> MINA now has basic support for suspending/resuming reads and writes on an IoSession for all transport types. We should use this feature to implement a traffic shaping filter which lets the user configure bandwidth limitations. Both globally and for individual sessions. Here are some configuration options I can come to think of:
> * Globally specify a maximum data rate for individual sessions (e.g. max 10 kb/s for all sessions).
> * Specify a maximum data rate on a per session basis (e.g. max 1 Mb/s for a particular session).
> * Specify a maximum upper limit on the bandwidth used by all sessions in total (e.g. all sessions share a total of 10 Mb/s).
> * Configure different traffic classes with different limits to allow for high/low priority traffic and partition sessions into these priority classes.
> I'm not sure how advanced it would have to be so please share your thoughts. Maybe point 1 and 2 would suffice? I think 3 and 4 add a lot of complexity since they need some kind of scheduling algorithm to provide fairness between sessions.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.