Visão geral da Sockets Python API


Os soquetes só estão disponíveis para apps pagos, e o tráfego de soquetes é faturado como largura de banda de saída. Os soquetes 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 as restrições listadas abaixo, precisam funcionar 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 Sockets API 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

O suporte a soquetes no 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. Caso você precise usar socket para contornar os limites da urlfetch, altere esse padrão. Dessa maneira, httplib usa 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:

    • Google Public DNS: 8.8.8.8, 8.8.4.4, 2001:4860:4860::8888, 2001:4860:4860::8844 porta 53
    • Gmail SMTPS: smtp.gmail.com portas 465 e 587
    • Gmail POP3S: pop.gmail.com porta 995
    • Gmail IMAPS: 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 apps.

  • 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

Você pode executar e testar código usando soquetes no servidor de desenvolvimento, sem usar 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 em Suporte a OpenSSL.

Como fazer httplib usar soquetes

Se você 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 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