Traffic dari soket ditagih sebagai bandwidth keluar. IO asinkron (seperti Twisted dalam Python) tidak didukung. App Engine mendukung API modul soket Python standar hanya untuk soket keluar. Anda cukup mengimpor library soket standar menggunakan pernyataan berikut:
import socket
Library yang mengimpor socket
, seperti
poplib
atau nntplib
, dan yang tidak melanggar
batasan dan pembatasan yang tercantum
di bawah, akan bekerja tanpa modifikasi.
Meskipun runtime Python 2 mendukung soket, ada batasan dan perilaku tertentu yang perlu Anda ketahui saat menggunakan soket.
Anda dapat memilih deskriptor soket dan meneruskannya di antara instance App Engine, seperti bagian dari payload Task. Dalam skenario ini, Anda dapat membuka soket pada frontend instance, lalu meneruskannya ke backend instance dan menggunakannya di sana.
Pada versi SDK sebelum 1.8.1, Anda tidak dapat memanggil opsi get/set pada soket. (Melakukan hal tersebut akan memunculkan pengecualian "Tidak Diterapkan".) Namun, Sockets API kini mengizinkan hal ini.
Untuk opsi yang didukung,
panggilan ke getsockopt
akan menampilkan nilai tiruan dan
panggilan ke setsockopt
akan diabaikan secara diam-diam. Error akan terus meningkat
untuk opsi yang tidak didukung.
Opsi yang didukung adalah:
SO_KEEPALIVE
SO_DEBUG
TCP_NODELAY
SO_LINGER
SO_OOBINLINE
SO_SNDBUF
SO_RCVBUF
SO_REUSEADDR
Pembatasan dan batasan
Dukungan socket di App Engine memiliki batasan berikut:
- Anda tidak dapat membuat soket pemrosesan; Anda hanya dapat membuat soket keluar.
- FTP tidak didukung.
- Secara default,
httplib
dikonfigurasi untuk menggunakan urlfetch api; jika Anda perlu menggunakansocket
untuk mengatasi batas urlfetch, Anda dapat melakukannya dengan mengubah default ini sehinggahttplib
menggunakan soket. Untuk mengetahui informasi selengkapnya, lihat Memanfaatkanhttplib
soket. - Anda hanya dapat menggunakan TCP atau UDP; protokol arbitrer tidak diperbolehkan.
- Anda tidak dapat terikat pada alamat IP atau port tertentu.
- Port 25 (SMTP) diblokir; Anda masih dapat menggunakan SMTP yang diautentikasi pada port pengiriman 587.
Rentang IP pribadi, siaran, multicast, dan Google diblokir, kecuali yang tercantum di bawah:
- Google Public DNS:
8.8.8.8
,8.8.4.4
,2001:4860:4860::8888
,2001:4860:4860::8844
port 53 - SMTP Gmail:
smtp.gmail.com
port 465 dan 587 - POP3S Gmail:
pop.gmail.com
port 995 - IMAPS Gmail:
imap.gmail.com
port 993
- Google Public DNS:
Deskripsi soket dikaitkan dengan aplikasi App Engine yang membuatnya dan tidak dapat ditransfer (tidak dapat digunakan oleh aplikasi lain).
Soket dapat digunakan kembali setelah 10 menit dalam kondisi tidak aktif; operasi soket apa pun akan menjaga soket tersebut tetap aktif selama 10 menit lagi.
Saat ini,
socket.gethostbyaddr()
tidak diimplementasikan di Python. Anda masih dapat menggunakan library standar SMTP Python (smtplib
) untuk membuka koneksi:# Open a connection to my mail server s = smtplib.SMTP('smtp.mailhostingcompany.net', 587)
Menggunakan soket dengan server pengembangan
Anda dapat menjalankan dan menguji kode menggunakan soket di server pengembangan, tanpa menggunakan parameter command line khusus.
Menggunakan soket dengan OpenSSL
App Engine mendukung Python OpenSSL native untuk runtime Python 2.7.
Anda harus mengonfigurasi file app.yaml
untuk memuat library ssl, seperti yang dijelaskan dalam
Dukungan OpenSSL.
Menonaktifkan URL Fetch agar tidak menangani semua permintaan keluar
Jika Anda mengimpor httplib
, secara default tindakan ini akan
menggunakan urlfetch api. Untuk mengubahnya
agar httplib
menggunakan soket, tambahkan variabel lingkungan berikut
ke file app.yaml
Anda:
env_variables:
GAE_USE_SOCKETS_HTTPLIB : 'anyvalue'
Anda dapat mengganti anyvalue
dengan nilai apa pun termasuk string kosong.
Contoh App Engine menggunakan soket
Untuk mengetahui contoh penggunaan soket, lihat aplikasi demo soket di GitHub Google Cloud Platform.