WhatsApp có thể nhận tin nhắn như thế nào khi không sử dụng?


23

Tôi tò mò về cách WhatsApp có thể nhận tin nhắn khi không sử dụng.

Ý tôi là, tôi hiểu rằng WhatsApp hoạt động bằng cách sử dụng kết nối Internet chứ không phải mạng điện thoại di động. Hãy tưởng tượng rằng tôi đã không chạm vào điện thoại của tôi trong nhiều giờ. Vào lúc đó, một người bạn gửi cho tôi một tin nhắn trên WhatsApp. Tôi nhận được nó ngay lập tức. Điều đó có nghĩa là WhatsApp luôn giữ kết nối Internet? Điều đó có nghĩa là WhatsApp hoạt động như một máy chủ, mở các cổng trên điện thoại? Hoặc có thể là một yêu cầu HTTP chạy dài?



Câu trả lời:


18

Lúc đầu, tôi nghĩ rằng đây rất có thể là một phiên bản của đám mây Android gửi tin nhắn cho thiết bị , nhưng không thể: WhatsApp không khai báo các quyền cần thiết và nó hoạt động trong Eclair (Android 2.1), trong khi nhắn tin trên đám mây cho thiết bị ( và thay thế, Google Cloud Messaging) yêu cầu ít nhất Froyo (Android 2.2).

Tuy nhiên, rất có thể là một số loại dịch vụ thông báo đẩy . Không thể nói chính xác cách thức triển khai mà không truy cập vào mã nguồn của WhatsApp.

Mặc dù vậy, phần về việc nó có thể nhận được tin nhắn khi không sử dụng là tương đối dễ giải thích. Ứng dụng gần như chắc chắn có một dịch vụ chạy trong nền để kiểm tra định kỳ với máy chủ (hoặc nhận được sự thúc đẩy của máy chủ hoặc bất cứ điều gì nó làm). Khi bạn nhận được một tin nhắn, dịch vụ sẽ bật lên một thông báo.

Đối với câu hỏi làm thế nào máy chủ có thể thực hiện một cú đẩy, đây là một khả năng (một lần nữa, tôi không thể xác minh nếu không có mã nguồn):

  1. WhatsApp bắt đầu và mở hai ổ cắm: Một để nghe và một để gửi tin nhắn đến máy chủ.
  2. WhatsApps bắt đầu nghe trên ổ cắm đầu tiên.
  3. WhatsApp gửi tin nhắn chứa số điện thoại của bạn và cổng của ổ cắm nghe đến máy chủ và chờ xác nhận.
  4. Máy chủ ghi lại số điện thoại và số cổng trong tin nhắn và địa chỉ IP mà tin nhắn đến từ đó.
  5. Máy chủ sẽ gửi xác nhận đến ứng dụng.
  6. Ứng dụng nhận được xác nhận và đóng ổ cắm tin nhắn.
  7. Một tin nhắn với số điện thoại của bạn khi đích đến vào máy chủ.
  8. Máy chủ sử dụng địa chỉ IP và số cổng mà nó đã liên kết với số điện thoại của bạn và sử dụng thông tin đó để đẩy tin nhắn đến điện thoại của bạn.

Để làm việc này, ứng dụng sẽ cần theo dõi trạng thái của kết nối mạng và đặt lại ổ cắm nghe / gửi lại thông báo đăng ký khi cần thiết (ví dụ: nếu địa chỉ IP thay đổi).


2
Whatsapp có phụ thuộc vào ứng dụng playstore không? Trích dẫn từ liên kết Wikipedia: Nó yêu cầu các thiết bị chạy Android 2.2 trở lên cũng đã cài đặt ứng dụng Market. Vì vậy, nó có thể không chính xác như vậy, nhưng chắc chắn là dựa trên các nguyên tắc tương tự. Tuy nhiên, bạn có thể muốn bao gồm một số trích đoạn từ đoạn 2 của bài viết để làm cho câu trả lời của bạn có giá trị hơn (và nhận được nhiều lượt nâng cấp hơn;)
Izzy

Bạn hoàn toàn đúng, @Izzy, tôi nên đã thêm chi tiết. Thật khó để làm điều đó khi tôi đang ngồi ở Subway viết trên chiếc SGS3 của mình. Tôi đã cập nhật câu trả lời ngay bây giờ. :-)
Trebor Rude

3
Nat sẽ không cho phép bước 8, ngay cả khi điện thoại di động ở trên ip tĩnh, điều này sẽ không bao giờ xảy ra. các cách có thể là Xmpp hoặc bỏ phiếu dài http

1
Nó có sự cho phép cần thiết. Nó được liệt kê là "nhận dữ liệu từ Internet" trong Cửa hàng Play. Xem android.stackexchange.com/a/61794
nyuszika7h

2
Thật không may, các kết nối TCP đến là không thể trên các thiết bị di động. Phần lớn trong số họ không có địa chỉ IP công cộng và ngay cả khi họ có (ví dụ: đối với các nhà khai thác có khả năng IPv6), các kết nối đến thường được lọc. Hầu hết các ứng dụng hiện nay đều sử dụng dịch vụ đẩy của Google hoặc chuyển ứng dụng khách liên tục của họ sang kết nối ổ cắm máy chủ (đáng chú ý nhất là Facebook). WhatsApp dường như thực hiện một cách tiếp cận hỗn hợp, theo kinh nghiệm của tôi: Nếu có sẵn GCM, ổ cắm liên tục sẽ bị đóng sau khi không hoạt động trong vài phút.
lxgr

8

Tôi chắc chắn rằng WhatsApp KHÔNG mở bất kỳ cổng nghe nào. hầu hết các ISP chặn các yêu cầu đến, điều đó sẽ không hoạt động.

WhatsApp có một dịch vụ. Về cơ bản điều đó có nghĩa là về mặt kỹ thuật, bạn không bao giờ thoát khỏi WhatsApp. Vì vậy, cách bạn nhận được tin nhắn trong khi bạn "không chạy" WhatsApp chính xác giống như cách bạn nhận được tin nhắn khi bạn đang chạy nó.

Máy khách, trong trường hợp này là WhatsApp, kết nối với máy chủ. Khách hàng duy trì kết nối đó. Khi máy chủ có điều gì đó mới để nói, nó sẽ gửi nó đến máy khách thông qua kết nối đó, và đó là tất cả.

Suy đoán đầu tiên của bạn là chính xác.

WhatsApp không có cơ chế đăng xuất thực sự, hãy xem điều này .

WhatsApp không có cơ chế đăng xuất. Ứng dụng được thiết kế để luôn được kết nối để bạn nhận được tin nhắn của mình một cách nhanh chóng, ngay cả khi bạn không chủ động sử dụng điện thoại của mình. Điều này tương tự như cách SMS hoạt động và cho phép tin nhắn WhatsApp được gửi gần như ngay lập tức.


2
Liên kết của bạn là dành cho Nokia - Tôi không thể tìm thấy một câu hỏi tương tự cho Android trên trang web của họ. Bạn có chắc chắn rằng điều tương tự áp dụng cho Android? Câu hỏi này từ Câu hỏi thường gặp về Android của họ chỉ ra rằng nó sử dụng kiến ​​trúc PUSH (trong phần "Tin nhắn có còn mất quá nhiều thời gian để liên lạc với điện thoại của bạn không?") - thay vì máy chủ / máy khách được kết nối liên tục.
Dylan Yaga

2
@DylanYaga là chính xác. Xem ví dụ đoạn cuối của câu trả lời nàycâu trả lời của Tre Harbor tại đây .
Izzy

Điều này có vẻ hợp lý nhất. Nhiều lần các dịch vụ này được gọi là dịch vụ đẩy, nhưng tôi không thể tưởng tượng rằng máy khách sẽ mở một cổng và thực tế hoạt động như một máy chủ cục bộ. Điều đó chắc chắn sẽ gây ra vấn đề bảo mật.
XUÂN

1

Câu hỏi thường gặp của họ cho thấy họ sử dụng GCM. Kiểm tra câu trả lời cho "Tin nhắn có còn mất quá nhiều thời gian để liên lạc với điện thoại của bạn không?"


Bạn nói đúng rằng Câu hỏi thường gặp gợi ý rằng, nhưng như Trebor Rude chỉ ra, ứng dụng không có sự cho phép cần thiết, vì vậy họ không thể sử dụng chính GCM.
Dan Hulme

2
Nó có sự cho phép cần thiết. Nó được liệt kê là "nhận dữ liệu từ Internet" trong Cửa hàng Play. Xem android.stackexchange.com/a/61794
nyuszika7h

2
Từ những gì tôi đã thấy, họ sử dụng GCM nếu nó có sẵn. Nếu không có sẵn vì một số lý do (ví dụ: trên thiết bị không có dịch vụ Play hoặc nếu được lọc bởi mạng), ổ cắm sẽ được giữ xung quanh vô thời hạn.
lxgr

0

Whatsapp giống như các ứng dụng khác được chạy dưới dạng dịch vụ. (Bạn luôn được kết nối) Tin nhắn được gửi cho bạn được lưu trữ trên máy chủ whatsapp cho đến 30 ngày, trong khoảng thời gian whatsapp của bạn sẽ được kích hoạt để nhận và xác nhận đã nhận được tin nhắn. Tài khoản cá nhân được lưu trữ với số điện thoại người dùng @ whatsapp.net


1
30 ngày . Vui lòng liên kết nguồn cho thực tế đó
beeshyams 6/2/2016

0

Tôi nghĩ nó nên như thế này:

Khi whatsapp mới, nó sẽ sử dụng giải pháp dựa trên PNS, PNS này sẽ đánh thức thiết bị và một khi nó thức dậy, nó có thể tạo kết nối ổ cắm với máy chủ whatsapp.

Sau khi whatsapp phổ biến hiện nay, hầu hết các thiết bị sẽ xuất hiện dưới dạng ứng dụng gốc và ứng dụng gốc sẽ không bị giết. Trong samsung s8 của tôi, tôi không thể gỡ cài đặt whatsapp, chế độ tiết kiệm năng lượng không thể giết chết nó

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.