这个工厂类我们使用了构造方法的一个布尔类型的参数,以便其可以在Server 端、Client端同时使用。我们以Server 端为例,你可以看到调用两次addMessageDecoder()方法添加了1 号、2 号,其实DemuxingProtocolDecoder 内部在维护了一个MessageDecoder数组,用于保存添加的所有的消息,每次decode()的时候就调用每个MessageDecoder的decodable()方法逐个检查,只要发现一个MessageDecoder 不是对应的,就从数组中移除,直到找到合适的MessageDecoder,如果最后发现数组为空,就表示没找到对应的MessageDecoder,最后抛出异常。
(9.)Server端:
package com.dxz.minademo4;
import java.net.InetSocketAddress;
import org.apache.mina.core.service.IoAcceptor;
import org.apache.mina.core.session.IdleStatus;
import org.apache.mina.filter.codec.ProtocolCodecFilter;
import org.apache.mina.filter.logging.LoggingFilter;
import org.apache.mina.transport.socket.nio.NioSocketAcceptor;
public class Server {
public static void main(String[] args) throws Exception {
IoAcceptor acceptor = new NioSocketAcceptor();
LoggingFilter lf = new LoggingFilter();
acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, 5);
acceptor.getFilterChain().addLast("logger", lf);
acceptor.getFilterChain().addLast("codec", new ProtocolCodecFilter(new MathProtocolCodecFactory(true)));
acceptor.setHandler(new ServerHandler());
acceptor.bind(new InetSocketAddress(9123));
}
}
(10.)Server端使用的IoHandler:
package com.dxz.minademo4;
import org.apache.mina.core.service.IoHandlerAdapter;
import org.apache.mina.core.session.IdleStatus;
import org.apache.mina.core.session.IoSession;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class ServerHandler extends IoHandlerAdapter {
private final static Logger log = LoggerFactory.getLogger(ServerHandler.class);
@Override
public void sessionIdle(IoSession session, IdleStatus status) throws Exception {
session.close(true);
}
@Override
public void messageReceived(IoSession session, Object message) throws Exception {
SendMessage sm = (SendMessage) message;
log.info("The message received is [ " + sm.getI() + " " + sm.getSymbol() + " " + sm.getJ() + " ]");
ResultMessage rm = new ResultMessage();
rm.setResult(sm.getI() + sm.getJ());
session.write(rm);
}
}
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/ruanjian/article-93147-35.html
是跟一直在打仗的美国人学的