J'utilise Apache Mina 1.1.7 et Java 1.6. Le serveur envoie une séquence de trois messages au client en boucle. Parfois, deux ensembles de messages se chevauchent. Par exemple, je me attends:Problème de synchronisation des threads avec Apache Mina
++ recv: MSGHEAD
++ recv: message body 1
++ recv: .
++ recv: MSGHEAD
++ recv: message body 2
++ recv: .
mais je reçois ceci:
++ recv: MSGHEAD
++ recv: MSGHEAD
++ recv: message body 1
++ recv: .
++ recv: message body 2
++ recv: .
Voici ma configuration du serveur:
SocketAcceptor acceptor = new SocketAcceptor();
SocketAcceptorConfig config = new SocketAcceptorConfig();
config.setThreadModel(ThreadModel.MANUAL);
if (true) {
SSLContextFactory factory = new SSLContextFactory();
config.getFilterChain().addLast("sslFilter", new SSLFilter(factory.getInstance(true)));
}
System.out.println(config.getFilterChain().toString());
config.getFilterChain().addLast("codec", new ProtocolCodecFilter(new TextLineCodecFactory(Charset.forName("UTF-8"))));
config.getFilterChain().addLast("to-message", new ToMessageIoFilter());
config.getSessionConfig().setReuseAddress(true);
config.getSessionConfig().setTcpNoDelay(true);
acceptor.bind(new InetSocketAddress(PORT), new MinaServerHandler(new MinaConnectionFactory()), config);
}
Voici comment j'envoie une séquence de messages :
public void sendMessage(String msg) throws IOException {
synchronized(session){
writeLine("MSGHEAD");
writeLine(msg);
writeLine(".");
}
}
private void writeLine(String line) {
WriteFuture w=session.write(line);
}
Que suis-je? ça ne va pas?