2013-08-31 30 views
13

Bạn có thể truy cập gmail bằng giao diện web, ứng dụng khách Android của Google hoặc sử dụng IMAP. Theo như tôi có thể nói, giao diện web và ứng dụng Android sử dụng giao thức hoàn toàn khác với IMAP - chúng không chỉ là giao diện trên đầu nó. Lý do tôi chắc chắn rằng đó là bởi vì các ứng dụng Android có thể không có vấn đề mở một thư mục với 1 m mail trong < 3 giây. Không có ứng dụng IMAP đơn giản nào có thể thực hiện điều đó.Google sử dụng giao thức nào cho Gmail? (không phải IMAP hoặc POP)

Vì vậy, câu hỏi của tôi là những gì được biết về giao thức bí mật này? Tài liệu tham chiếu cho nó ở đâu? Nó đã được thiết kế ngược chưa? Google có cấm sử dụng nó không? câu trả lời

arnt của cung cấp một phương pháp tuyệt vời để kiểm tra tốc độ imap liệu gmail của:

$ openssl s_client -host imap.gmail.com -port 993 -crlf 
... 
* OK Gimap ready for requests from 12.34.56.78 
$ a LOGIN ***@*** *** 
a OK 
$ c SELECT "[Gmail]/All mail" !!!! 
* FLAGS (\Answered \Flagged \Draft \Deleted \Seen) 
* OK [PERMANENTFLAGS (\Answered \Flagged \Draft \Deleted \Seen \*)] Flags permitted. 
* OK [UIDVALIDITY 673376278] UIDs valid. 
* 1142417 EXISTS 
* 0 RECENT 
* OK [UIDNEXT 1159771] Predicted next UID. 
* OK [HIGHESTMODSEQ 8670601] 
c OK [READ-WRITE] [Gmail]/All mail selected. (Success) 

Lệnh Tôi đã đánh dấu, c SELECT "[Gmail]/All mail" mất khoảng 20 giây để hoàn thành. Kể từ thời điểm đó là lớn hơn nó cần cho các ứng dụng Gmail trên điện thoại Android tương đối không đủ sức mạnh của tôi để khởi động và tải nhãn Tất cả thư mà nó trong vòng chưa đầy 6 giây ngay cả sau khi tôi đã xóa cache của nó. Ứng dụng web thậm chí còn nhanh hơn. Trừ khi tôi thiếu một cái gì đó cơ bản này chứng minh "vượt quá nghi ngờ hợp lý" mà khách hàng Gmail của Google không sử dụng IMAP vì bạn không bao giờ phải đợi 20 giây cho bất kỳ lệnh SELECT nào để hoàn thành.

+0

Bạn có chắc chắn nó không phải là imap. Imap không cần tải xuống tất cả email để mở thư mục. Vì vậy, nó có thể tải xuống một số thông tin cho 10 email hàng đầu và tiếp tục tải xuống phần còn lại của thông tin trong nền. –

+0

Có. Hiệu suất IMAP giảm xuống cho các hộp thư lớn. Gmail có thể hiển thị 50 chủ đề gần đây nhất trong một hộp thư với 1 triệu thư trong <3 giây. Không có ứng dụng khách IMAP nào khác có thể làm điều đó. Có nhiều dấu hiệu không rõ ràng trong Gmail nhưng nó rất quan trọng đối với câu hỏi này. –

+0

Tôi tin rằng bạn có hai lựa chọn để tìm ra sau đó - tháo rời máy khách của họ hoặc cấu hình thiết bị để đi qua WiFi trên máy tính của bạn và kiểm tra các cổng đích là gì. –

Trả lời

5

Sau khi nghiên cứu nhiều hơn, tôi đã phát hiện ra rằng có tồn tại một API cho GMail: https://developers.google.com/gmail/api/ Tôi không nghĩ rằng API được phát hành khi tôi đăng câu hỏi này trở lại trong năm 2013.

Sử dụng API đó, tôi đã tạo ra một chương trình demo mà fetches các mail 100 cuối cùng của một nhãn: https://gist.github.com/bjourne/37a9d15b03862003008a1b0169190dbe

phần liên quan của chương trình là:

resource = service.users().messages() 
result = resource.list(userId = 'me', labelIds = [label]).execute() 
mail_ids = [m['id'] for m in result['messages']] 

start = time() 
mails = [] 
batch = BatchHttpRequest() 
cb = lambda req, res, exc: mails.append(to_mail(res)) 
for mail_id in mail_ids: 
    get_request = resource.get(**headers_params(mail_id)) 
    batch.add(get_request, callback = cb) 
result = batch.execute() 
print('Took %.2f seconds' % (time() - start)) 

Nó liệt kê 100 thông điệp cuối cùng được sắp xếp theo ngày trong một nhãn (thư mục trong thuật ngữ IMAP) c ontaining hơn 570k tin nhắn.

Trên máy của tôi, vòng lặp này mất khoảng 0,5 - 0,8 giây. Tôi có thể tự tin tuyên bố rằng không có ứng dụng khách IMAP thuần túy nào trên hành tinh thậm chí còn đến gần. Có khả năng, IMAP sẽ không bao giờ nhanh hơn vì nó không phù hợp với cách Google lưu trữ thư nội bộ.

Vì vậy, tôi sẽ trả lời câu hỏi của riêng tôi. Đây là API họ đang sử dụng và nó không được tiếp xúc trước đó.

+1

Công việc thực sự cần thời gian ở đây là bảo trì MSN. Khi bạn truy cập thư, máy chủ của google cho bạn biết đó là số thư 569901 của thư hiện có trong hộp thư. Đây là thông tin mà hầu hết các ứng dụng khách IMAP loại bỏ. – arnt

1

"Không ứng dụng khách IMAP nào khác có thể làm điều này" là một tuyên bố khá táo bạo, nhưng hàng triệu tin nhắn cũng là một con số khá lớn. Tôi khuyên bạn nên cung cấp cho Trojitá một lần thử tại đây. Rất có thể đồng bộ hóa ban đầu sẽ là khá chậm (nó sẽ chuyển cờ cho hàng triệu thư đó vì nhiều lý do kỹ thuật liên quan đến cách cờ IMAP, SELECT, SEARCHSTATUS được chỉ định), nhưng resynchronizaiton tiếp theo sẽ nhanh như chớp đến ESEARCH, CONDSTOREQRESYNC. Tôi rất muốn nghe Trojitá hoạt động tốt như thế nào với thiết lập của bạn - thông tin liên hệ có trên trang chủ.

Đối với câu hỏi của bạn - hầu hết các webmail ngày nay đều cung cấp API riêng để sử dụng riêng. Một kiến ​​trúc điển hình là chuyển các thông điệp về trạng thái cập nhật thông qua JSON, nhưng không có tiêu chuẩn cho điều này và giao diện là độc quyền. Rất có thể là "ứng dụng" GMail sử dụng cùng một phương pháp (hoặc tương tự). Bạn không có nhiều tùy chọn để xác minh điều này vì có thể sử dụng TLS. Với một giao diện web, nó là tầm thường để xem lưu lượng truy cập với một plugin trình duyệt thích hợp, nhưng không quá nhiều với một ứng dụng Android độc lập.

+0

Cảm ơn bạn đã đề xuất. Trojita không chậm bằng bất kỳ phương tiện nào (thực sự rất linh hoạt so với một số khách hàng khác) nhưng tốc độ của nó không ở bất cứ đâu gần với các khách hàng bản địa của gmail. –

9

Ứng dụng Android (ít nhất là ứng dụng tôi đã sử dụng) sử dụng IMAP. Bạn có thể xác minh điều này bằng cách chạy Wireshark trên máy chủ.

Vì sao ứng dụng Android quá nhanh - điều tôi biết là nó sử dụng lệnh TÌM KIẾM để chọn các thông báo n gần đây nhất. Các ứng dụng khách trên máy tính để bàn như Thunderbird hoặc Outlook nặng hơn nhiều và tải xuống các tiêu đề và siêu dữ liệu cho mọi thư trong thư mục, bất chấp các đề xuất cho chúng không.

Điện thoại thông minh không có tài nguyên để lưu trữ và xử lý hàng triệu email (mặc dù có nhiều email hiện đại hơn) nên phương pháp TÌM KIẾM cho phép truy cập thư nhanh cho thiết bị cầm tay.

Dù sao đi nữa, Wireshark có thể tiết lộ rất nhiều về hành vi của máy khách và máy chủ IMAP. Nếu bạn thực sự tò mò, hãy cho nó một shot. Bạn không thể làm điều này nếu máy chủ là Gmail, nhưng bạn có thể dùng thử trên máy chủ khác (ví dụ: hMailServer).

+0

Ứng dụng Android mà tôi đang nói đến là: https://play.google.com/store/apps/details?id=com.google.android.gm Làm cách nào bạn biết nó sử dụng IMAP? Ngoài ra, không có cách nào trong IMAP để giới hạn tìm kiếm chỉ n thư gần đây nhất. Vui lòng cung cấp tài liệu tham khảo nếu bạn biết cách khác. Vì vậy, đó không thể là lý do tại sao gmail là nhanh. –

+0

Tôi biết vì tôi đã làm việc với IMAP rộng rãi - như tôi đã nói, nếu bạn kết nối với một máy chủ và chạy Wireshark trên máy chủ đó, bạn sẽ thấy các thông báo nhận được thông qua. Và như tôi đã nói, bạn có thể nhận được một tập các thư gần đây bằng cách làm việc với lệnh TÌM KIẾM.Nếu tôi nhớ chính xác, ứng dụng thư khách Android sử dụng TÌM KIẾM cùng với điều kiện ngày, do đó, họ nhận được thứ gì đó giống như hai tuần cuối cùng của thư. Một lần nữa, cách tốt nhất để hiểu điều này là để xem cho chính mình trong Wireshark. – Gigi

+1

Nếu một khách hàng chú ý đến các tin nhắn EXISTS, nó có thể tìm kiếm các thư gần đây nhất. Nếu EXISTS cuối cùng của máy chủ là 50000, 'x UID SEARCH 49000: * SUBJECT sex' tìm kiếm các thông điệp về giới tính trong số nghìn lần gần đây nhất. – arnt

1

Bạn có thể kiểm tra hiệu suất IMAP của Gmail một cách dễ dàng (nếu bạn có hộp thư triệu thư). Mở kết nối IMAP với

openssl s_client -connect imap.gmail.com:993 -crlf 

rồi đăng nhập và mở hộp thư đến của bạn.

a login [email protected] yourpassword 
b select inbox 

Hoặc mở hộp mọi thư của bạn nếu hộp thư là không đủ lớn (tên có thể thay đổi tùy theo ngôn ngữ giao diện người dùng):

c select "[Gmail]/All Mail" 

Nếu SELECT là nhanh nhưng một khách hàng IMAP chậm, thì đó là vì máy khách gửi các lệnh chậm bổ sung/không cần thiết. Nhiều người chọn điền hoặc cập nhật cấu trúc dữ liệu cho toàn bộ triệu thư ngay cả khi họ sẽ chỉ hiển thị 40 thư. Đó là sự lựa chọn của khách hàng, chứ không phải sự chậm trễ của IMAP.

Các vấn đề liên quan