Resolvi esses dias experimentar a possibilidade de usar continuations em Java para implementar um servidor utilizando programação CPS (Continuation Passing Style). Posso dizer que o resultado foi supreendedor, não só foi simples escrever o código de suporte, mas como o commons-javaflow está em um estado bem usavel.
Eu implementei um servidor de echo, e o objetivo era que ele fosse muito escalavel, então queria que com uma thread apenas fosse possivel lidar com milhares de clientes. A saída era usar NIO, que leva a um estilo de programação muito complexo. Nesse ponto entram continuations, que me permite escrever uma casca sobre a api do java.nio de forma a fica super simples. Estou terminando de refatorar o código, mas ai vai como ficou o código que implementa o servidor de echo:
public void run() {
try {
String line;
while ((line = reader.readLine()) != null) {
writer.write(line);
writer.write("\n");
writer.flush();
}
socket.close();
} catch (Exception e) {
e.printStackTrace();
}
}
Ném parece que estou usando Channels, Buffers e toda aquela parafernália. Assim que terminar de fazer uma limpesa no código, mostro o truque e, se der tempo, um benchmark usando threads e continuations.
2 responses so far ↓
1 Luca Bastos // Oct 10, 2006 at 9:37 pm
Como baixou o commons-javaflow?
2 kumpera // Oct 11, 2006 at 12:24 pm
Lucas, eu baixei os fontes do subversion e compilei. O commons-javaflow ainda não possui release oficial.
Leave a Comment