Arquivo da tag: cliente

Como implementar uma aplicação Cliente-Servidor com Sockets em Ruby

Fonte: Samuel Vinicius/IMasters

Este é primeiro de vários artigos que irei publicar sobre Sockets em Ruby. Mas, antes de qualquer coisa, é conveniente dizer o que são Sockets:

A grosso modo, são as extremidades de um canal de comunicação bidirecional. Ou seja, você pode utilizar Sockets para fazer comunicação entre processos de uma máquina, entre máquinas diferentes e entre processos de máquinas diferentes.

O que iremos fazer?

Como este é o primeiro artigo sobre o tema, pretendo ir direto ao ponto, mostrando de forma simples como implementar uma aplicação Cliente-Servidor. Nessa aplicação, o cliente envia uma mensagem para o servidor e este responde, sendo a comunicação entre cliente e servidor realizada via Socket através do protocolo TCP.

Então, sem mais delongas, vamos aos códigos:

  • Servidor
 
# file server.rb
require 'socket'
 
server = TCPServer.open(3001)  # Abre socket em escuta na porta 3001
loop { # o servidor nunca morre, fica sempre executando
client = server.accept      # aceita conexão do cliente
msg_cliente = client.recvfrom( 10000 ) # recebe mensagem - 10000 bytes - do cliente
 
puts  "Mensagem do cliente: #{msg_cliente}" # imprime a mensagem do cliente no servidor
client.puts "Ola cliente eu, o servidor, recebi sua mensagem" #envia uma mensagem ao cliente
client.close # fecha conexão
}
  • Cliente
# file client.rb
require 'socket'
 
server = TCPSocket.open('localhost', 3001) # conecta ao servidor na porta 3001
server.puts "Ola servidor eu, o cliente, estou enviando uma mensagem" # envia mensagem para o servidor
 
resp = server.recvfrom( 10000 ) # recebe a mensagem -10000 bytes - do servidor
puts resp
 
server.close # Fecha a conexão com o servidor

Como rodar a aplicação?

Primeiro, salve o código do servidor em um arquivo .rb (por exemplo server.rb) e execute o arquivo – ruby server.rb. Nesse ponto, o servidor está esperando a conexão de um cliente. Agora salve o código do cliente de forma análoga e execute em outro terminal, de modo que cliente e servidor sejam rodados ao mesmo tempo. A partir de então, o cliente envia uma mensagem ao servidor e o servidor responde.

Este é um exemplo simples do que pode ser feito com Sockets. Espero que te ajude em algo.

***

Referência: http://www.tutorialspoint.com/ruby/ruby_socket_programming.htm

Como implementar uma aplicação cliente-servidor usando Sockets em Ruby

Fonte: Samuel Vinicius/IMasters

Referência: http://www.tutorialspoint.com/ruby/ruby_socket_programming.htm

Este é primeiro de vários artigos que irei publicar sobre Sockets em Ruby. Mas antes de qualquer coisa, é conveniente dizer o que são Sockets:

A grosso modo, são as extremidades de um canal de comunicação bidirecional. Ou seja, você pode utilizar Sockets para fazer comunicação entre processos de uma máquina, entre máquinas diferentes e entre processos de máquinas diferentes.

O que iremos fazer?

Como este é o primeiro artigo sobre o tema, pretendo ir direto ao ponto, mostrando, de forma simples, como implementar uma aplicação cliente-servidor. Nela, o cliente envia uma mensagem para o servidor e este responde. Sendo a comunicação entre cliente e servidor realizada via Socket, através do protocolo TCP.

Então, sem mais delongas. Vamos aos códigos:

Servidor

# file server.rb
require 'socket'

server = TCPServer.open(3001)  # Abre socket em escuta na porta 3001
loop { # o servidor nunca morre, fica sempre executando
client = server.accept      # aceita conexão do cliente
msg_cliente = client.recvfrom( 10000 ) # recebe mensagem - 10000 bytes - do cliente

puts  "Mensagem do cliente: #{msg_cliente}" # imprime a mensagem do cliente no servidor
client.puts "Ola cliente eu, o servidor, recebi sua mensagem" #envia uma mensagem ao cliente
client.close # fecha conexão
}

Cliente

# file client.rb
require 'socket'

server = TCPSocket.open('localhost', 3001) # conecta ao servidor na porta 3001
server.puts "Ola servidor eu, o cliente, estou enviando uma mensagem" # envia mensagem para o servidor

resp = server.recvfrom( 10000 ) # recebe a mensagem -10000 bytes - do servidor
puts resp

server.close # Fecha a conexão com o servidor

Como rodar a aplicação?

Primeiro, salve o código do servidor em um arquivo .rb – por exemplo server.rb – e execute o arquivo – ruby server.rb. Neste ponto, o servidor está esperando a conexão de um cliente. Agora salve o código do cliente de forma análoga e execute em outro terminal de modo que cliente e servidor sejam rodados ao mesmo tempo. A partir de então, o cliente envia uma mensagem ao servidor e o servidor responde.

Este é um exemplo simples do que pode ser feito com Sockets, espero que te ajude em algo.

O web designer dos sonhos

Fonte: Alda Rocha/IMasters

Recentemente, eu tive que recusar alguns freelas por não poder cumprir com o prazo de entrega. Sendo assim, procurei por designers freelancers para que pudesse repassar os trabalhos. Busquei pessoas que poderiam dar continuidade ao meu trabalho, mas me deparei com um problema que virou uma constante na área web design: a carência de profissionais completos.

Muita gente tem dificuldade de ver o macro e o job como um todo, o que faz com que o layout passe de mão em mão até chegar, pronto e funcional, ao navegador do usuário. Fulano só recorta, beltrano só cria e cicrano só faz o HTML e o CSS. Ao final, acabei precisando de quatro pessoas pra fazer algo que eu faria sozinha.

Qual o motivo de não termos designers completos que participam do projeto do começo ao fim? De quem é a culpa de termos layouts do tipo Frankenstein rodando por aí, com remendos e peças encaixadas sem nenhum padrão de qualidade? Bom aqui estão os culpados: o cliente e o web designer.

Cliente – quem pede:

O cliente acha que não é importante o designer participar do brainstorm, ou ter um briefing completo do que ele, cliente, quer para o layout. Ele acha que se der as peças soltas, vai ser fácil formar o quebra-cabeça. Não que seja impossível, mas não é, nem de longe, o ideal.

Quando cada profissional faz uma parte, é preciso haver uma comunicação impecável entre todos eles. Mas quando se faz um freela, isso é muito raro. Caso não haja uma boa comunicação, colocar o site para rodar pode se tornar uma experiência traumática. Acho que o cliente tem que iluminar o caminho pra o web designer para que, por exemplo, ele saiba que se fizer um botão cheio de frescura, pode complicar na hora de rodar algum aplicativo que vai ser inserido no futuro.

Saber como o layout do cliente se comporta hoje e como ele quer que se comporte no futuro é essencial pra que o web designer consiga atender as expectativas do cliente.

Web designer – quem monta e cria:

Muitos web designers não se preocupam em ter uma carreira, e a culpa de não termos fidelidade e nem continuidade pra início e fim de projetos pode ser desses profissionais que fazem o trabalho, no bom e velho português, “nas coxas”. E essa situação acaba gerando a famosa refação e faz com que o layout passe de mão em mão, na esperança de que alguém consiga fazê-lo rodar. O layout vira uma batata quente.

Esse tipo de pessoa, que só faz uma função no processo, é o designer acomodado, que fica satisfeito em apertar um parafuso, sendo que ele poderia criar o carro todo. Como ele sabe que receberá seu salário no próximo mês, está tudo bem pra ele.

Eu, particularmente, acho terrível não saber onde está se metendo e para onde aquilo vai. Projeto é como um filho; e filho não se faz pela metade! Quando trabalhamos blocado, só ajustando certas áreas, fica difícil falar que você realmente criou e fez aquele layout.

Como resolver?

Não sei ao certo qual é a solução para esse problema, já que isso requer uma comoção geral em torno do assunto – e precisaríamos, claro, de designers menos preguiçosos. Pessoas que tenham interesse em crescer na área, crescer na vida, ganhar mais conhecimento, aprender, ler mais, e ser completo para ver o macro, sem travar numa tela só, ou errar no rumo do site porque está no escuro e tem preguiça de sair dele.

Precisamos de mais gente querendo criar a máquina como um todo, do que simplesmente apertar parafusos!