Bagaimana WhatsApp dapat menerima pesan saat tidak digunakan?

23

Saya ingin tahu tentang bagaimana WhatsApp dapat menerima pesan saat tidak digunakan.

Maksud saya, saya mengerti bahwa WhatsApp berfungsi menggunakan koneksi Internet daripada jaringan ponsel. Bayangkan saya belum menyentuh ponsel saya dalam beberapa jam. Pada saat itu, seorang teman mengirimi saya pesan di WhatsApp. Saya segera mendapatkannya. Apakah itu berarti WhatsApp menjaga koneksi internet tetap terhubung setiap saat? Apakah itu berarti bahwa WhatsApp bertindak sebagai server, membuka porta pada ponsel? Atau mungkin permintaan HTTP yang sudah berjalan lama?

Ram Rachum
sumber

Jawaban:

18

Pada awalnya, saya pikir ini kemungkinan besar adalah contoh cloud Android untuk pengiriman pesan perangkat , tetapi tidak mungkin: WhatsApp tidak menyatakan izin yang diperlukan, dan itu berfungsi di Eclair (Android 2.1), sementara pesan cloud ke perangkat ( dan penggantinya, Google Cloud Messaging) membutuhkan setidaknya Froyo (Android 2.2).

Namun, kemungkinan besar semacam layanan pemberitahuan push . Tidak mungkin untuk mengatakan dengan tepat bagaimana penerapannya tanpa akses ke kode sumber WhatsApp.

Namun, bagian tentang hal itu dapat menerima pesan ketika tidak digunakan relatif mudah untuk dijelaskan. Aplikasi ini hampir pasti memiliki layanan yang berjalan di latar belakang untuk memeriksa server secara berkala (atau menerima dorongan server, atau apa pun fungsinya). Saat Anda menerima pesan, layanan akan memunculkan pemberitahuan.

Adapun pertanyaan tentang bagaimana server bisa melakukan push, inilah kemungkinan (sekali lagi, saya tidak dapat memverifikasi tanpa kode sumber):

  1. WhatsApp memulai dan membuka dua soket: Satu untuk mendengarkan dan satu untuk mengirim pesan ke server.
  2. WhatsApps mulai mendengarkan pada soket pertama.
  3. WhatsApp mengirimkan pesan yang berisi nomor telepon Anda dan port soket pendengar ke server dan menunggu pemberitahuan.
  4. Server mencatat nomor telepon dan porta dalam pesan dan alamat IP dari mana pesan itu berasal.
  5. Server mengirim pemberitahuan ke aplikasi.
  6. Aplikasi menerima pengakuan dan menutup soket pesan.
  7. Pesan dengan nomor telepon Anda sebagai tujuan masuk ke server.
  8. Server menggunakan alamat IP dan nomor port yang dikaitkan dengan nomor telepon Anda dan menggunakan informasi itu untuk mendorong pesan ke telepon Anda.

Agar ini berfungsi, aplikasi harus memantau keadaan koneksi jaringan dan mengatur ulang soket pendengaran / mengirim ulang pesan pendaftaran bila perlu (jika alamat IP berubah, misalnya).

Trebor Rude
sumber
2
Apakah Whatsapp tergantung pada aplikasi playstore? Mengutip dari tautan Wikipedia: Dibutuhkan perangkat yang menjalankan Android 2.2 atau lebih tinggi yang juga sudah menginstal aplikasi Market. Jadi mungkin tidak persis seperti itu, tetapi tentunya didasarkan pada prinsip yang sama. Anda mungkin ingin memasukkan beberapa kutipan dari paragraf ke-2 artikel, untuk membuat jawaban Anda lebih berharga (dan menerima lebih banyak upvotes;)
Izzy
Anda benar, @Izzy, seharusnya saya menambahkan lebih banyak detail. Itu sulit dilakukan ketika saya sedang duduk di Subway menulis di SGS3 saya. Saya sudah memperbarui jawabannya sekarang. :-)
Trebor Rude
3
Nat tidak akan mengizinkan langkah 8, bahkan jika ponsel menggunakan ip statis, yang tidak akan pernah terjadi. cara yang mungkin adalah Xmpp atau polling panjang http
1
Itu memang memiliki izin yang diperlukan. Itu terdaftar sebagai "terima data dari Internet" di Play Store. Lihat android.stackexchange.com/a/61794
nyuszika7h
2
Sayangnya, koneksi TCP yang masuk hampir tidak mungkin pada perangkat seluler. Sebagian besar dari mereka tidak memiliki alamat IP publik, dan bahkan jika mereka melakukannya (misalnya untuk operator yang mampu IPv6), koneksi masuk biasanya difilter. Sebagian besar aplikasi saat ini baik menggunakan layanan push Google atau menggulung klien mereka sendiri ke koneksi soket server (terutama Facebook). WhatsApp tampaknya mengambil pendekatan hibrid, dalam pengalaman saya: Jika GCM tersedia, soket persisten ditutup setelah tidak digunakan selama beberapa menit.
lxgr
8

Saya tentu saja yakin bahwa WhatsApp TIDAK membuka porta mendengarkan. sebagian besar ISP memblokir permintaan masuk, itu tidak akan berhasil.

WhatsApp memiliki layanan. Pada dasarnya itu berarti bahwa secara teknis Anda tidak pernah keluar dari WhatsApp. Jadi, cara Anda menerima pesan saat Anda "tidak menjalankan" WhatsApp adalah cara yang persis sama dengan yang Anda terima ketika Anda menjalankannya.

Klien, dalam hal ini WhatsApp, terhubung ke server. Klien mempertahankan koneksi itu. Ketika server memiliki sesuatu yang baru untuk dikatakan, itu mengirimkannya ke klien melalui koneksi itu, Dan itu saja.

Tebakan pertama Anda benar.

WhatsApp tidak memiliki mekanisme keluar yang sebenarnya, lihat ini .

WhatsApp tidak memiliki mekanisme logout. Aplikasi ini dirancang untuk selalu terhubung sehingga Anda menerima pesan Anda dengan cepat, bahkan ketika Anda tidak aktif menggunakan telepon Anda. Ini mirip dengan cara kerja SMS dan memungkinkan pesan WhatsApp dikirimkan hampir secara instan.

Pikiran152
sumber
2
Tautan Anda untuk Nokia - Saya tidak dapat menemukan pertanyaan serupa untuk Android di situs mereka. Apakah Anda yakin hal yang sama berlaku untuk Android? Pertanyaan ini dari FAQ Android mereka menunjukkan bahwa ia menggunakan arsitektur PUSH (di bagian "Apakah pesan masih terlalu lama untuk mencapai ponsel Anda?") - daripada server / klien yang terhubung terus-menerus.
Dylan Yaga
2
@DylanYaga benar. Lihat misalnya paragraf terakhir dari jawaban ini dan Trebel menjawab di sini .
Izzy
Ini sepertinya yang paling logis. Seringkali layanan ini disebut layanan push, tetapi saya tidak dapat membayangkan bahwa klien akan membuka port dan bahkan bertindak sebagai server lokal. Itu pasti akan menyebabkan masalah keamanan.
SPRBRN
1

Mereka FAQ menyarankan mereka menggunakan GCM. Periksa jawaban untuk "Apakah pesan masih terlalu lama untuk mencapai telepon Anda?"

hitam
sumber
Anda benar bahwa FAQ menyarankan hal itu, tetapi seperti yang Trebor Rude tunjukkan, aplikasi tidak memiliki izin yang diperlukan, sehingga mereka tidak dapat menggunakan GCM itu sendiri.
Dan Hulme
2
Itu memang memiliki izin yang diperlukan. Itu terdaftar sebagai "terima data dari Internet" di Play Store. Lihat android.stackexchange.com/a/61794
nyuszika7h
2
Dari apa yang saya lihat, mereka menggunakan GCM jika tersedia. Jika tidak tersedia karena alasan tertentu (mis. Pada perangkat tanpa layanan Play atau jika difilter oleh jaringan), soket disimpan tanpa batas waktu.
lxgr
0

Whatsapp seperti aplikasi lain dijalankan sebagai layanan. (Anda selalu terhubung) Pesan yang dikirim kepada Anda disimpan di server whatsapp hingga 30 hari, dalam periode mana whatsapp Anda harus aktif untuk menerima dan mengakui penerimaan pesan. Akun individual disimpan dengan nomor telepon pengguna @ whatsapp.net

Dickson
sumber
1
30 hari . Harap tautkan sumber untuk fakta itu
beeshyams
0

Saya pikir harus seperti ini:

Ketika whatsapp masih baru, itu akan menggunakan solusi berbasis PNS, PNS ini hanya akan membangunkan perangkat dan setelah bangun, ia dapat membuat koneksi soket ke server whatsapp.

Setelah ketika whatsapp populer sekarang sebagian besar perangkatnya datang sebagai aplikasi asli dan aplikasi asli tidak akan dibunuh. Di samsung s8 saya, saya tidak bisa menghapus whatsapp, mode hemat daya tidak dapat membunuhnya

Nasir
sumber