2012-04-13 17 views
49

này rất hữu ích khi:Làm cách nào để ứng dụng Meteor hoạt động ngoại tuyến?

  • các server bị down và khách hàng không thể kết nối thời gian thực đồng bộ
  • không có khả năng kết nối Internet
  • người dùng không muốn lên mạng nhưng muốn làm việc với ứng dụng;
+0

Không ra khỏi hộp, tất nhiên nó có thể thực hiện một giải pháp ngoại tuyến toàn bộ, nhưng đó là hàng ngàn dòng mã – Raynos

+0

Đây là một phần được giải quyết bởi appcache đến sớm: http://devel-docs.meteor.com/#appcache (ít nhất là tệp kê khai bộ nhớ cache HTML5). Trông được! – Vindberg

+0

Điều gì xảy ra nếu một người cần phát triển một ứng dụng di động ngoại tuyến đầy đủ? [Câu hỏi của tôi] (http://stackoverflow.com/questions/27893600/meteor-for-non-internet-mobile-app) về điều này chưa được trả lời. Bất kỳ ai có thông tin chi tiết. –

Trả lời

55

Có! Điều này đã được thực hiện trong Meteor, phần lớn.

Nếu kết nối với máy chủ bị mất, khách hàng vẫn có thể hoạt động cục bộ. Cơ sở dữ liệu viết sẽ xuất hiện để thành công trên máy khách và phản ánh ngay lập tức trên màn hình. Khi kết nối được thiết lập lại Meteor sẽ gửi lại tất cả các yêu cầu phương thức đang chờ xử lý đến máy chủ và cập nhật màn hình máy khách với kết quả từ máy chủ. Đây là tất cả kết quả của việc bù trễ độ trễ, đang ngoại tuyến được xử lý giống như máy chủ chỉ rất chậm.

Khách hàng có thể theo dõi đầu ra 'Meteor.status()' phản ứng để xem trạng thái của kết nối hiện tại. Ví dụ: bạn có thể sử dụng Meteor.status để lái xe bật lên với bộ hẹn giờ kết nối lại và nút 'kết nối ngay bây giờ', như gmail.

EDIT: tất nhiên, Meteor không phải là ma thuật. Nếu bạn nhấn 'tải lại' hoặc điều hướng khỏi trang, v.v. trong khi ngoại tuyến, bạn sẽ mất phiên Meteor và không thể bắt đầu lại cho đến khi bạn lấy lại mạng. Điều này đúng với tất cả các ứng dụng web có chế độ ngoại tuyến, do đó, nó không nên gây bất ngờ cho người dùng ứng dụng của bạn.

+2

Đây thực sự là câu trả lời nhờ n1mmy – dennis

+29

Sẽ rất thú vị khi lưu trữ các bản ghi bẩn trên máy khách trong LocalStorage khi kết nối không có sẵn để trong trường hợp trạng thái trang cục bộ bị mất, chúng có thể được phục hồi. Tôi muốn thấy chức năng này trong thiên thạch. Tôi cũng thực sự quan tâm đến việc tìm cách lưu trữ toàn bộ tập dữ liệu cục bộ (có thể dưới dạng tệp trong tệp kê khai ứng dụng) để ứng dụng có thể được mở lại và sử dụng khi ngoại tuyến, nhưng đây là một yêu cầu khó. –

+6

Tôi đã phát triển một thư viện để cho phép ứng dụng Backbone.js của bạn hoạt động ngoại tuyến với cùng một thuật toán. https://github.com/Ask11/backbone.offline –

11

Có một vài tùy chọn khác có thể giải quyết vấn đề 'nếu tab của bạn đóng, hoặc bạn tải lại'. Tôi chưa thử chúng nhưng trông thú vị.

https://github.com/awwx/meteor-offline-data:

Meteor tuyến dữ liệu

Trang chủ của dự án dữ liệu ẩn Meteor, thực hiện một "Offline Bộ sưu tập" mà kết thúc tốt đẹp một Meteor.Collection:

dữ liệu từ máy chủ là được lưu trữ liên tục trong cơ sở dữ liệu trình duyệt, làm cho nó khả dụng cho ứng dụng ngay cả khi ứng dụng bắt đầu lên ngoại tuyến.

Các thay đổi do người dùng thực hiện cũng được lưu trong cơ sở dữ liệu trình duyệt, bảo quản chúng nếu trình duyệt bị đóng và mở lại. Lần sau ứng dụng trực tuyến, các thay đổi được gửi tới máy chủ.

Nội dung cập nhật được chia sẻ một cách phản ứng trên các cửa sổ trình duyệt mở trên cùng một ứng dụng , ngay cả khi ngoại tuyến.

https://github.com/GroundMeteor/Meteor-GroundDB:

Các tính năng:

dấu chân nhẹ

hỗ trợ trình duyệt Broad Chrome, Safari, Firefox và Internet Explorer 9 dự phòng để Meteor bình thường.Bộ sưu tập nếu không có localstorage Resume của thay đổi trong bộ sưu tập Tiếp tục các phương thức Hoạt động ngoại tuyến cập nhật chéo tab cửa sổ Hỗ trợ SmartCollection Hỗ trợ cho offline cơ sở dữ liệu phía máy khách Chỉ sử dụng EJSON.minify và EJSON.maxify để nén dữ liệu trong localstorage Trong tương lai sẽ là một bộ xử lý xung đột tùy biến trên server-side

-1

tôi không phải là một chuyên gia nhưng chúng ta hãy tưởng tượng một giải pháp:

không phải ngày một viên thuốc/cell (không chắc chắn chúng ta có thể cài đặt một chồng sao băng trên thiết bị như vậy), nhưng trên máy tính để bàn, người dùng cần tính khả dụng ngoại tuyến, chẳng hạn như điểm bán hàng, một số giao dịch đăng nhập, hạn chế hoặc không cập nhật danh sách sản phẩm, giá cả và khoảng không quảng cáo, v.v. (Giao dịch sử dụng cổ phiếu không phải là thực tế địa phương, phải được «xác nhận (thứ tự ngoại tuyến)» (Vị trí có cổ phiếu đó có thể bán ngay cả khi đã được đặt trước theo thứ tự ngoại tuyến mà họ không biết, vì họ hoặc người dùng khác đang ngoại tuyến, đặc biệt nếu người dùng có cổ phiếu là ngoại tuyến)

Bên cạnh đó, một số tính năng chỉ có thể được sử dụng khi trực tuyến (sử dụng một ứng dụng web Meteor khác)

Tất nhiên, không phải tất cả các phần của ứng dụng đều có thể được sử dụng ngoại tuyến: Tạo bản ghi nhạy cảm, một số giao dịch, tìm kiếm cần bộ sưu tập đầy đủ, v.v. hine webserver với một Meteor đã được cài đặt đầy đủ.

Oplog sẽ đồng bộ hóa DB ngoại tuyến này với bộ sưu tập gương trên máy chủ tập trung, một DB cụ thể cho mỗi người dùng, vì vậy không phải tất cả dữ liệu lớn đều khả dụng ngoại tuyến trên máy của người dùng. Ý tưởng là duy trì tính khả dụng của một số tính năng. Chúng tôi có thể chỉ có một DB cho giao dịch ngoại tuyến của tất cả người dùng, nhưng oplog sẽ đồng bộ hóa tất cả các giao dịch này trên tất cả DB ngoại tuyến của người dùng. Chúng tôi có thể POST và xóa các hồ sơ này càng sớm càng tốt, nhưng không tốt cho sự riêng tư. Tốt nhất là DB ngoại tuyến của khách hàng - và được nhân đôi trên máy chủ tập trung - sẽ chỉ bao gồm các bản ghi được tạo bởi người dùng hoặc thông tin mà người dùng có thể cần như vậy, một DB cụ thể cho mỗi người dùng.

Chức năng phía máy chủ trung tâm sẽ thường xuyên xác thực và BẬT các bản ghi này cho tất cả người dùng bao gồm DB tập trung lớn hơn.

Cách đơn giản: Tất cả giao dịch được thực hiện bằng ứng dụng sao băng ngoại tuyến cục bộ sẽ đăng giao dịch lên dịch vụ web khi khả dụng. (theo cách này, người dùng không phải quản lý bằng 2 ứng dụng, chuyển qua lại.)

Chúng tôi có thể sử dụng khái niệm 2 số hóa đơn: Số hóa đơn bán hàng: được tạo tại thời điểm giao dịch (ID tài liệu?)

Số hóa đơn tuần tự: cho mục đích kế toán, được tạo sau (khi trực tuyến và tài liệu từ 15 đến 20 giây).Chúng tôi biết chắc chắn tất cả các hoá đơn mới được tạo trong khoảng thời gian đó)

Ý tưởng ở đây là có ngăn xếp sao băng cục bộ lấy xe của sự kiên trì địa phương, Đồng bộ hóa Oplog với sự kiên trì tập trung (trừ khi chúng tôi gửi lệnh assynchrone webservice cho các giao dịch đăng khi trực tuyến, nhưng chúng tôi mất tự động sinc với DB lớn hơn)

(Sau khi tất cả, có thể tốt hơn có 2 ứng dụng đang chạy: trên địa phương, một trung tâm phục vụ và một cách để cho 2 nói chuyện với nhau, hoặc một ứng dụng trực tuyến và ngoại tuyến với cách thoải mái để hướng người dùng sử dụng ưu tiên trực tuyến và ngoại tuyến nếu có ngoại tuyến)

Sẽ tốt nếu cộng đồng công ty của nhiều người hiểu biết hơn đánh giá và tài liệu một cách làm việc. Tôi chưa sử dụng Meteor, vẫn còn trong quá trình học tập cơ bản.

Cảm ơn,

Marc

+1

Trong khi câu trả lời của bạn có phần toàn diện, tôi nghĩ bạn đang thiếu điểm một chút. – Dave

+0

Chắc chắn, tôi đang đánh giá khả năng nhưng không chắc chắn giải pháp tốt nhất là gì. (Bằng cách này, tôi có thể cập nhật bài viết của tôi kể từ khi bạn đọc nó) Sẽ được vui để có được các precisions về điểm tôi đang mất tích. Dù sao cũng cảm ơn bạn. – EMHmark7

0

Đáy dòng:

1) Hoặc là trình duyệt hoàn toàn có thể lưu các phiên thực tế (mỗi bao lâu mọi ứng dụng yêu cầu phải vì có những thay đổi Đối với?. ứng dụng như vậy, cứ mỗi 10 giây là không đủ, chúng tôi cần mọi sự kiện). Chúng ta có thể lập trình nó trong Firefox không? (Nhưng nó sẽ cần phải lưu mọi thứ (HTML, JS, MinoMongoDB, v.v. chỉ cho một thay đổi!)

2) Hoặc chúng tôi có một ngăn xếp sao lưu đầy đủ của khách hàng.) nhưng bằng cách nào đó giao tiếp các hoạt động CRUD của mình cho một ứng dụng trực tuyến khác trong một tab hoặc phiên bản khác của trình duyệt. (Ứng dụng thứ 2 sẽ được phục vụ bởi máy chủ từ xa thực sự) Vấn đề là nếu 2 ứng dụng như vậy có thể giao tiếp. Tôi cho rằng các trình duyệt sẽ cấm vì lý do bảo mật)

Một ý tưởng sáng tạo khác có thể là: Kích hoạt oplog trên ngăn xếp của khách hàng. Sau đó, mỗi back-online và liên tục khi trực tuyến, oplog của khách hàng thực tế có thể được xuất/nhập trong ứng dụng chính (đó là nhật ký oplog khác),

3) Trừ khi chúng ta có thể gửi yêu cầu call() từ thiên thạch của máy khách đầy đủ ngăn xếp đến một đống sao băng trên máy chủ. (Có thể? Có một số quy tắc về giới hạn tên miền URL trong thiên thạch)

Nhưng nó không sửa chữa các khả năng có một thiên thạch ngăn xếp đầy đủ về một viên thuốc (Tôi không biết điều shuch là có thể)

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