Thanks Raghavendra,

Message may vary from device to device. Some devices send messages in hex 
format, others send in encrypted form and their length varies from device to 
device.

There is no delimiter. Just byte location based we can parse these messages. 
And parser for each device is different.

Regards,
Krishan

Get Outlook for Android<https://aka.ms/ghei36>



From: Raghavendra Balgi
Sent: Wednesday, 19 December, 9:39 PM
Subject: Re: How MINA works with lot of socket connections?
To: [email protected]
Cc: Atul Kandhari, Dhananjay Kandari, Shailendra Kumar Sonkar


Hi Krishna, What is your concept of a message? I mean, is it a fixed string or 
length delimited etc? You might want to look at PrefixedStringDecoder to break 
messages as they are received. On Wed, 19 Dec 2018 at 9:08 PM, Krishan Babbar 
wrote: > Dear All, > > I am working on an IoT project. I have created a Java 
application using > MINA library. All the devices are connecting to this Java 
application using > TCP protocol. > I have created simulator (to simulate 
devices) to do our load testing. In > simulator I have given limit of 3000 
threads in thread pool so that one > instance of simulator can connect 3000 
devices at once. > I tried testing for 30000 devices by executing 5 instances 
of simulators > in parallel. Each device was sending messages after interval of 
30 seconds > and I had 10 messages per device. > > But my Java Application did 
not receive all the messages in one go, it is > processing messages very slow. 
> > Suppose 5 simulators have sent (3000 devices/threads per instance * 5 > 
instances * 5 mins) 150000 messages in 5 minutes but Java Application (with > 
MINA) has processed about 10000 messages only. > And even after sometime my 
Java Application was closed due to memory issue. > > Please help and guide how 
MINA is working in case of lot of > devices/sockets connection? > Where is MINA 
storing messages which are yet to process? > > With 16 GB RAM Linux machine, 
and giving 4 GB and 6 GB as a heap > parameters in Java Application (java 
-Xms4096m -Xmx6144m -Dserver -jar > Application.jar), how many devices/sockets 
MINA library can handle? > > Is MINA using single thread to connect all devices 
and receive packets > from them? > I mean is it possible to receive all 
messages immediately in my Request > Handler? > > Below is given my code for 
MINA configuration and from request handler we > are starting a new thread for 
each message for processing. > > public abstract class AbstractListener { > > 
/** The logger instance.*/ > private static Logger LOGGER = > 
Logger.getLogger(AbstractListener.class); > > /** The buffer size constant. */ 
> protected static final int BUFFER_SIZE = 2048; > > /** > * The method to 
initialize udp and tcp/ip listeners. > * > * @param portKey > * the port of the 
udp or tcp/ip listener. > * @throws IOException > * the io exception to be 
thrown in case of > error. > */ > public void init(String portKey) throws 
IOException { > LOGGER.info("Entering init()"); > AbstractIoAcceptor acceptor = 
> initInternal(); > acceptor.setHandler(new RequestHandler()); > > 
acceptor.getFilterChain().addLast("logger", new LoggingFilter()); > > 
acceptor.getSessionConfig().setReadBufferSize(BUFFER_SIZE); > > 
acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, 10); > if 
(acceptor instanceof > NioDatagramAcceptor) { > ((NioDatagramAcceptor) > 
acceptor).getSessionConfig().setReuseAddress(true); > } > acceptor.bind(new > 
InetSocketAddress(Integer.parseInt(ServerConfigLoader.getInstance().getProperty(portKey))));
 > LOGGER.info("Exiting init()"); > } > > /** > * The abstract method to be 
over ridden by appropriate > listener (udp / > * tcp/ip) for invoking 
appropriate listener. > * > * @return the appropriate (udp/ tcp/ip) io 
acceptor. > */ > public abstract AbstractIoAcceptor initInternal(); > } > > > 
public class RequestHandler extends IoHandlerAdapter { > > /** The logger 
instance. */ > private static final Logger LOGGER = > 
LoggerFactory.getLogger(RequestHandler.class); > > private ExecutorService 
executorService = > Executors.newCachedThreadPool(); > > /** > * Default 
constructor. > */ > public RequestHandler() { > super(); > } > > /** > * 
{@inheritDoc} > */ > @Override > public void exceptionCaught(IoSession session, 
Throwable > cause) throws Exception { > LOGGER.error("Exception caught in > 
RequestHandler.exceptionCaught()", cause); > session.closeNow(); > } > > /** > 
* {@inheritDoc} > */ > @Override > public void messageReceived(IoSession 
session, Object > message) throws Exception { > LOGGER.info("Entering 
messageReceived()"); > try { > SocketAddress > remoteAddress = 
session.getRemoteAddress(); > String msg = > 
((IoBuffer)message).getHexDump().replaceAll(" ", ""); > String strArray[] = > 
remoteAddress.toString().split(":"); > LOGGER.info("Client > IP:Port & Message 
[" + InetAddress.getByName(strArray[0].split("/")[1]) + > ":" + strArray[1] + " 
-> " + msg + "]"); > > executorService.execute(new HelperThread(session, msg)); 
> } catch (Exception e) { > LOGGER.error("Exception > occurred in 
RequestHandler", e); > throw e; > } finally { > LOGGER.info("Exiting > 
messageReceived()"); > } > } > } > > > Thanks & Regards, > Krishan Babbar > > 
============================================================================================================================
 > Disclaimer: This message and the information contained herein is > 
proprietary and confidential and subject to the Tech Mahindra policy > 
statement, you may review the policy at > 
http://www.techmahindra.com/Disclaimer.html externally > 
http://tim.techmahindra.com/tim/disclaimer.html internally within > 
TechMahindra. > > 
===========================================================================================================================
 > > > 
============================================================================================================================
 > > Disclaimer: This message and the information contained herein is > 
proprietary and confidential and subject to the Tech Mahindra policy > 
statement, you may review the policy at > 
http://www.techmahindra.com/Disclaimer.html < > 
http://www.techmahindra.com/Disclaimer.html> externally > 
http://tim.techmahindra.com/tim/disclaimer.html < > 
http://tim.techmahindra.com/tim/disclaimer.html> internally within > 
TechMahindra. > > > 
============================================================================================================================
 > -- Raghavendra Balgi Bangalore Phone: +91 7795816719 Email : 
[email protected]

============================================================================================================================

Disclaimer:  This message and the information contained herein is proprietary 
and confidential and subject to the Tech Mahindra policy statement, you may 
review the policy at http://www.techmahindra.com/Disclaimer.html 
<http://www.techmahindra.com/Disclaimer.html> externally 
http://tim.techmahindra.com/tim/disclaimer.html 
<http://tim.techmahindra.com/tim/disclaimer.html> internally within 
TechMahindra.

============================================================================================================================

Reply via email to