Visão geral da API Sockets para Java 8

Esta é uma versão Beta da API Sockets. Essa API não é coberta por nenhum SLA nem política de suspensão de uso, estando sujeita a alterações incompatíveis com versões anteriores.

Importante: os aplicativos no ambiente de execução do Java 8 podem usar soquetes Java nativos sem restrições, o que inclui o uso de classes NIO e seus métodos. Os aplicativos em execução no ambiente de execução do Java 7 estão sujeitos às limitações de soquete descritas nesta página.


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).

O ambiente de execução do Java 7 é compatível com um soquete Java de saída limitada se uma versão modificada de java.net.Socket e java.net.DatagramSocket (ambos em inglês) for usada.

O ambiente de execução do Java 7 não é compatível com as classes java.nio.SocketChannel (em inglês) java.nio nem com a capacidade de chamar opções "get" ou "set" em soquetes. O uso desses recursos lançará exceções Not Implemented. Essas restrições são suspensas por padrão durante o uso do ambiente de execução do Java 8.

Veja abaixo as opções compatíveis para aplicativos do ambiente de execução do Java 7:

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

Limitações e restrições (somente ambiente de execução do Java 7)

A compatibilidade com os soquetes no App Engine para aplicativos em execução no ambiente do Java 7 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.
  • java.net.URL (em inglês) ainda está configurado para usar a API URL Fetch no ambiente de execução do Java 7. Para contornar essa limitação, execute o aplicativo no ambiente de execução do Java 8, em que java.net.URL e java.net.HttpURLConnection usam soquetes Java nativos por padrão.
  • InetAddress.isReachable é um ambiente autônomo.
  • A maioria das classes em javax.net.ssl (em inglês) são compatíveis.
  • 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.

  • Não é possível usar Select entre vários soquetes disponíveis porque isso exige java.nio.SocketChannel, que ainda não é compatível.

    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.

    Amostra do App Engine que usa soquetes (somente ambiente de execução do Java 7)

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