Geovane Fedrecheski
geonnave@gmail.com
Um resumo bem rápido de como dois computadores se comunicam na internet
Como o browser pede e obtém os sites; e principalmente como o servidor recebe os pedidos e os responde
Um pouquinho da linguagem Ruby
Frodo
Gandalf
The Ring?
0 1 2 3
0 1 2 3
Gandalf | 2
Frodo | 1
Frodo
Gandalf
The Ring?
0 1 2 3
0 1 2 3
Gandalf | 2
Frodo | 1
1.2.3.7
1.2.3.8
0 1 2 3 ... 65536
0 1 2 3 ... 65536
1.2.3.7 | 4970
1.2.3.8 | 2222
The Ring?
1.2.3.8 | 2222
1.2.3.7 | 4980
1.2.3.7
1.2.3.8
0 1 . . . 65536
0 1 . . . 65536
1.2.3.7
1.2.3.8
0 1 . . . 65536
0 1 . . . 65536
1.2.3.7
1.2.3.8
0 1 ... 2222 ... 65536
0 1 ... ? ... 65536
socket.open()
socket.listen()
socket.accept()TCP socket (server)
TCP socket (client)
Um programa em Ruby que:
require 'socket' # Inclui as classes TCPServer e TCPSocket
# Inicializa um objeto TCPServer que irá escutar
# por pedidos de conexão em localhost:2222
server = TCPServer.new('localhost', 2222)
# loop infinito, irá processar uma conexão de cada vez
loop do
  # espera até um cliente conectar
  puts "accepting connections.."
  socket = server.accept
  # Lê a primeira linha do request
  request = socket.gets
  # Imprime essa linha na tela só pra conferir
  puts request
  # Devolvendo pro telnet
  socket.print "Whatever you ask, the answer is 42!\n"
  # Essa conexão já fez seu trabalho, fechou!
  socket.close
endweb_server_0.rb> ruby web_server_0.rb
accepting connections...> telnet localhost 2222
testando!testando!
accepting connections...Terminal B
Terminal A
Whatever you ask, the answer is 42!
Conexão ao host perdida!
definíssemos regras nessa comunicação?
up abcDEABCDEChamamos esse tipo de regra de
(HyperText Transfer Protocol)
Browsers e Web Servers costumam usar um protocolo chamado
Um programa em Ruby que:
GET / HTTP/1.1HTTP/1.1 200 OK
Content-Type: text/plain
Hello Worldrequire 'socket'
server = TCPServer.new('localhost', 2222)
loop do
  puts "accepting connections.."
  socket = server.accept
  # Lê a primeira linha do request
  #  (algo como "GET / HTTP/1.1")
  request = socket.gets
  puts request
  # Resposta no formato HTTP!
  response = "HTTP/1.1 200 OK\r\n" +
             "Content-Type: text/plain\r\n" +
             "\r\n" +
             "Hello World!\n"
  # devolvendo pro cliente
  socket.print response
  socket.close
endweb_server_1.rbUm programa em Ruby que:
require 'socket'
server = TCPServer.new('localhost', 2222)
def process_request_path(request_line)
  method, path, version = request_line.split(" ")
  puts path
  case path
  when "/"
    "Hello World\n"
  when "/oraculo"
    "A resposta é sempre 42!\n"
  else
    "Você veio ao lugar errado :/"
  end
end
loop do
  puts "\naccepting connections.."
  socket = server.accept
  # Lê a primeira linha do request
  #  (algo como "GET / HTTP/1.1")
  request_line = socket.gets
  puts request_line
  response_text = process_request_path(request_line)
  # a nossa resposta...
  response = "HTTP/1.1 200 OK\r\n" +
             "Content-Type: text/plain\r\n" +
             "\r\n" +
             "#{response_text}"
  # devolvendo pro cliente
  socket.print response
  socket.close
endweb_server_2.rbUm programa em Ruby que:
<!DOCTYPE html>
<html>
    <body>
        <h1>Hello World!</h1>
    </body>
</html>index.htmlrequire 'socket'
server = TCPServer.new('localhost', 2222)
def process_request_path(request_line)
  method, path, version = request_line.split(" ")
  puts path
  case path
  when "/"
    File.read("index.html")
  when "/oraculo"
    "<html><body><h1>A resposta é sempre 42!</h1></body></html>\n"
  else
    "<html><body><h1>Você veio ao lugar errado :/</h1></body></html>\n"
  end
end
loop do
  puts "\naccepting connections.."
  socket = server.accept
  request_line = socket.gets
  puts request_line
  response_text = process_request_path(request_line)
  response = "HTTP/1.1 200 OK\r\n" +
             "Content-Type: text/plain\r\n" +
             "\r\n" +
             "#{response_text}"
  socket.print response
  socket.close
endweb_server_3.rbUm resumo bem rápido de como dois computadores se comunicam na internet
TCP, IP, Sockets
HTTP
puts "Hello World"
Como o browser pede e obtém os sites; e principalmente como o servidor recebe os pedidos e os responde
Um pouquinho da linguagem Ruby
Para realmente entender, faça!
depois fica + fácil aprender fazer sites etc
(tutorial de frameworks tem de monte na internet, livros tbm)
Geovane Fedrecheski
geonnave@gmail.com