minaÖ®ÐÔÄÜȱÏݼ°bug,java¸ßÐÔÄÜÓÎÏ··þÎñÆ÷ºÎÔÚ?
Apache MINA (mina-2.0.0-M6Ô´ÂëΪÀý):
ÎÒÃÇʹÓÃmina nio tcp×î³£ÓõÄÑùÀýÈçÏÂ:
NioSocketAcceptor acceptor = new NioSocketAcceptor(/*NioProcessorPool's size*/);
DefaultIoFilterChainBuilder chain = acceptor.getFilterChain();
//chain.addLast("codec", new ProtocolCodecFilter(
//new TextLineCodecFactory()));
......
// Bind
acceptor.setHandler(/*our IoHandler*/);
acceptor.bind(new InetSocketAddress(port));
------------------------------------------------------------------------------------
Ê×ÏÈ´ÓNioSocketAcceptor(extends AbstractPollingIoAcceptor)¿ªÊ¼,
bind(SocketAddress)--->bindInternal--->startupAcceptor:Æô¶¯AbstractPollingIoAcceptor.Acceptor.runʹÓÃexecutor[Executor]µÄÏß³Ì,×¢²á[interestOps:SelectionKey.OP_ACCEPT],È»ºówakeup selector.
Ò»µ©ÓÐÁ¬½Ó½øÀ´¾Í¹¹½¨NioSocketSession--¶ÔÓ¦--channal,È»ºósession.getProcessor().add(session)½«µ±Ç°µÄchannal¼ÓÈëµ½NioProcessorµÄselectorÖÐÈ¥[interestOps:SelectionKey.OP_READ],ÕâÑùÿ¸öÁ¬½ÓÖÐÓÐÇëÇó¹ýÀ´¾ÍÓÉÏàÓ¦µÄNioProcessorÀ´´¦Àí.
ÕâÀïÓм¸µãҪ˵Ã÷µÄÊÇ:
1.Ò»¸öNioSocketAcceptor¶ÔÓ¦Á˶à¸öNioProcessor,±ÈÈçNioSocketAcceptor¾ÍʹÓÃÁËSimpleIoProcessorPool DEFAULT_SIZE = Runtime.getRuntime().availableProcessors() + 1.µ±È»Õâ¸ösizeÔÚnew NioSocketAcceptorµÄʱºò¿ÉÒÔÉ趨.
2.Ò»¸öNioSocketAcceptor¶ÔÓ¦Ò»¸öjava nio selector[OP_ACCEPT],Ò»¸öNioProcessorÒ²¶ÔÓ¦Ò»¸öjava nio selector[OP_READ].
3.Ò»¸öNioSocketAcceptor¶ÔÓ¦Ò»¸öÄÚ²¿µÄAbstractPollingIoAcceptor.Acceptor---thread.
4.Ò»¸öNioProcessorÒ²¶ÔÓ¦Ò»¸öÄÚ²¿µÄAbstractPollingIoProcessor.Processor---thread.
5.ÔÚnew NioSocket
Ïà¹ØÎĵµ£º
synchronized£º ͬ²½µÄ
synchronizedÔÚ²Ù×÷ÉÏÓÐÁ½ÖÖÓ°Ïì¶ÔÏóµÄÇé¿ö£º
1) ÔÚij¸ö¶ÔÏóʵÀýÄÚ£¬synchronized method(){}¿ÉÒÔ·ÀÖ¹¶à¸öÏß³Ìͬʱ·ÃÎÊÕâ¸ö¶ÔÏóµÄsynchronized·½·¨£¨Èç¹ûÒ»¸ö¶ÔÏóÓжà¸ösynchronized·½·¨£¬Ö»ÒªÒ»¸öÏ̷߳ÃÎÊÁËÆäÖеÄÒ»¸ösynchronized·½·¨£¬ÆäËüÏ̲߳»ÄÜͬʱ·ÃÎÊÕâ¸ö¶ÔÏóÖÐÈκÎÒ»¸ösynchronized·½·¨£ ......
/Download by HTTP
//For other protocol, do it yourself
import java.net.*;
import java.io.*;
public class DonwLoa ......
<%
//header.jsp
out.println("Protocol: " + request.getProtocol() + "<br>");
out.println("Scheme: " + request.getScheme() + "<br>");
out.println("Server Name: " + request.getServerName() + "<br>" );
out.println(&quo ......
ÉèÖÃ×¢ÊÍÄ£°åµÄÈë¿Ú£º Window->Preference->Java->Code Style->Code Template È»ºóÕ¹¿ªComments½Úµã¾ÍÊÇËùÓÐÐèÉèÖÃ×¢Ê͵ÄÔªËØÀ²¡£ÏÖ¾Íÿһ¸öÔªËØÖðÒ»½éÉÜ£º
Îļþ(Files)×¢ÊͱêÇ©£º
/**
* @Title: ${file_name}
* @Package ${package_name}
* @Description: ${todo}(ÓÃÒ»¾ä»°ÃèÊö¸ÃÎļ ......