Visão geral da API Sockets para Python 2


Os soquetes só estão disponíveis para apps pagos, e o tráfego de soquetes é faturado como largura de banda de saída. Eles também são limitados por cotas diárias e por minuto (burst). Async IO (como Twisted no Python) não é compatível. O App Engine aceita a API do módulo de soquete do Python padrão apenas para soquetes de saída. Basta importar a biblioteca de soquetes padrão usando a seguinte instrução:

import socket

As bibliotecas que importam socket, como poplib ou nntplib, e não violam as limitações e restrições listadas abaixo funcionam sem modificação.

O App Engine aceita soquetes, mas existem determinadas limitações e comportamentos a que você precisa estar atento ao usar soquetes.

Separe um descritor de soquete e o passe entre instâncias do App Engine, como parte de um payload Task. Neste cenário, abra um soquete em uma instância de front-end, passe-o para uma instância de back-end e o use aí.

Em versões do SDK anteriores a 1.8.1, você não podia chamar opções get/set em relação a soquetes. Isso gerou exceções "Não implementado". No entanto, a API Sockets já permite isso.

Para opções compatíveis, as chamadas para getsockopt retornarão um valor fictício e as chamadas para setsockopt serão ignoradas silenciosamente. Os erros continuarão sendo gerados para opções não compatíveis.

As opções compatíveis são estas:

  • SO_KEEPALIVE
  • SO_DEBUG
  • TCP_NODELAY
  • SO_LINGER
  • SO_OOBINLINE
  • SO_SNDBUF
  • SO_RCVBUF
  • SO_REUSEADDR

Limitações e restrições

A compatibilidade de soquetes com o App Engine tem as seguintes limitações:

  • Os soquetes estão disponíveis apenas em apps pagos.
  • Não é possível criar um soquete de escuta. Você só pode criar soquetes de saída.
  • O FTP não é compatível.
  • Por padrão, httplib é configurado para usar a API urlfetch. Se for necessário usar socket para contornar os limites da urlfetch, altere esse padrão para que httplib use soquetes. Para mais informações, consulte Como fazer o httplib usar soquetes.
  • Só é possível usar TCP ou UDP. Não são permitidos protocolos arbitrários.
  • Não é possível se vincular a portas ou endereços IP específicos.
  • A porta 25 (SMTP) está bloqueada. Ainda é possível usar SMTP autenticado na porta de envio 587.
  • Os intervalos particulares, de transmissão, multicast e de IPs do Google, exceto os colocados na lista de permissões, estão bloqueados:

    • DNS público do Google: 8.8.8.8, 8.8.4.4, 2001:4860:4860::8888, 2001:4860:4860::8844 porta 53
    • SMTPS do Gmail: smtp.gmail.com portas 465 e 587
    • POP3S do Gmail: pop.gmail.com porta 995
    • IMAPS do Gmail: imap.gmail.com porta 993
  • Os descritores de soquete estão associados ao app do App Engine que os criou e não são transferíveis. Eles não podem ser usados por outros aplicativos.

  • Os soquetes poderão ser recuperados depois de dois minutos de inatividade. Qualquer operação de soquete mantém o soquete ativo por mais dois minutos.

  • Atualmente, socket.gethostbyaddr() não é implementado no Python. Você ainda pode usar a biblioteca padrão SMTP do Python (smtplib) para abrir uma conexão:

    # Open a connection to my mail server
    s = smtplib.SMTP('smtp.mailhostingcompany.net', 587)
    

Como usar soquetes com o servidor de desenvolvimento

É possível executar e testar código usando soquetes no servidor de desenvolvimento, sem empregar parâmetros de linha de comando especiais.

Como usar soquetes com OpenSSL

O App Engine aceita o OpenSSL nativo do Python no tempo de execução do Python 2.7. Você precisa configurar o arquivo app.yaml para carregar a biblioteca ssl, conforme descrito no Suporte a OpenSSL.

Como fazer o httplib usar soquetes

Ao importar httplib, por padrão, ele usará a API urlfetch. Para alterar isso de maneira que httplib use soquetes, basta adicionar a variável de ambiente ao arquivo app.yaml do projeto.

 env_variables:
   GAE_USE_SOCKETS_HTTPLIB : 'anyvalue'

O valor pode ser qualquer valor (inclusive uma string vazia). Se a variável não for fornecida, httplib continuará usando URLFetch.

Amostra do App Engine que usa soquetes

Para uma amostra que usa soquetes, consulte o app de demonstração do soquete (em inglês) no GitHub do Google Cloud Platform.

Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…

Ambiente padrão do App Engine para Python 2