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.