Outro dia, na lista de Caché em inglês no google groups, alguém perguntou sobre como usar sockets em Caché. Como eu também nunca havia usado sockets diretamente, resolvi investigar. Como já disse, a documentação do Caché está longe dos javadoc da Sun, então boa parte do descobri foi por "feeling" mesmo, até porque neste caso não precisei testar muito.
Então, abaixo vai o código exemplo que eu mandei, e que vc pode colocar em qualquer classe pra testar:
ClassMethod connect()
{
set sock = ##class(%IO.Socket).%New()
set st = $$$OK
w "Starting", !
// connecting, param:
// address, port, timeout, status
w sock.Open("127.0.0.1","7777",-1, st), !
w st, !
// reading from socket, param:
// maxStringSize, timeout, status, lineTerminator
w sock.ReadLine(50, 30, st, $c(13)), !
// writing to socket, param:
// stringToBeWritten, automaticFlush, status
d sock.Write("We are the champions", 1, st)
quit
}
//===================================================
ClassMethod server()
{
set sock = ##class(%IO.ServerSocket).%New()
set st = $$$OK
w "Starting server...", !
// open serverSocket, param:
// port, timeOut, status
w sock.Open(7777, -1, st), !
w st, !
// server to listen incoming connections, param:
// timeOut, status
w sock.Listen(-1, st), !
w st, !
// writing to socket, param:
// stringToBeWritten, automaticFlush, status
d sock.Write("I am the champion", 1, st)
// reading from socket, param:
// maxStringSize, timeout, status, lineTerminator
w sock.ReadLine(50, 30, st, $c(13)), !
w sock.Close(), !
w "Closing server...", !
}
O primeiro método, connect()
, usa %IO.Socket, que implementa um socket básico. Se você já programou com sockets em Java, verá que é muito simples o seu uso. Na verdade, depois de criado o objeto, basta executar o método Open
, passando o endereço do host, a porta, um timeout para conexão e como referência, o status.
Depois de conectado, pode-se usar os métodos de %IO.DeviceStream para ler e escrever no stream de dados.
//===================================================
O segundo método, server()
, usa %IO.ServerSocket. A diferença é que o ServerSocket implementa o servidor, ou seja, um socket que fica 'escutando' requisições, ao passo que o %IO.Socket se conecta a um socket servidor. Ao contrário do Java, por exemplo, que um ServerSocket retorna um objeto Socket, no Caché o próprio objeto ServerSocket pode ser usado como se fosse um socket comum. No código acima, nota-se que os mesmos métodos usados para escrever/ler da stream são usados nos dois objetos socket.
Também é possível deixar o ServerSocket escutando e ao chegar uma conexão, iniciar outro Job (processo) em background, para lidar com a conexão. Entretanto, não explorei essa possibilidade, quem sabe mais para frente...
quinta-feira, 19 de julho de 2007
Sockets em Caché
Postado por
Andarilho
às
09:44
Marcadores: caché, programação, rede, sockets
Assinar:
Postar comentários (Atom)
Nenhum comentário:
Postar um comentário