Tôi muốn chạy một số tác vụ thông thường độc lập của khách hàng trong nền của một ứng dụng Meteor (như cạo một số trang). Vì vậy, họ không nên được bên trong bất kỳ chủ đề khách hàng, nhưng một khi họ hoàn thành, tôi muốn cập nhật tất cả các khách hàng với thông tin. cách tốt nhất để đạt được điều này là gì?Tác vụ nền không được kết nối với bất kỳ ứng dụng khách nào trong Meteor
Trả lời
Để làm điều này theo cách cho phép các quy trình bên ngoài tùy ý cập nhật các máy khách Meteor, hãy sử dụng giao thức DDP được liên kết với Meteor. Quy trình máy chủ của bạn có thể ghi vào kênh DDP và khi nào khách hàng của bạn sẽ cập nhật. Có một cái nhìn vào bài đăng này cho một ví dụ và một trường hợp sử dụng, mà có thể tương tự như của bạn:
Using node ddp-client to insert into a meteor collection from Node
Giao thức là khá thẳng về phía trước, và bài cho thấy một ví dụ về quá trình viết Node.js vào bộ sưu tập Mongo cập nhật ứng dụng khách trong thời gian thực.
Chạy chúng trên mã phía máy chủ của bạn. Nếu thông thường, bạn có nghĩa là các công việc được hẹn giờ mỗi ngày hoặc một cái gì đó:
Bạn có thể sử dụng công việc cron với gói cron của Tom Coleman: https://github.com/tmeasday/meteor-cron.
Bạn sẽ cần phải cài đặt meteorite package manager first: npm install meteorite -g
và sau đó cài đặt gói cron trong dự án của bạn dir mrt add cron-tick
máy chủ js
var MyCron = new Cron();
// this job will happen every day (60 seconds * 60 * 24)
MyCron.addJob(60*60*24, function() {
//Scrape your stuff
//Update your collections
});
Ngay sau khi bạn chạy cập nhật của bạn/chèn/chỉnh sửa chúng sẽ được đẩy tới tất cả khách hàng.
Có cách nào để đẩy thứ gì đó cho khách hàng không dựa trên bộ sưu tập (vì vậy không dựa trên thứ gì đó trong cơ sở dữ liệu)? Cũng giống như thông tin mà một cái gì đó đã được thực hiện? Một thông báo? – Mitar
Trong đó công việc cron này chạy trong chuỗi nào? – Mitar
Một mẹo nhỏ hơn một chút, javascript trong nút sẽ nằm trong một chuỗi duy nhất, vì vậy đây là nơi mà Fibers xuất hiện. Nếu bạn sử dụng một Meteor.call trong cron đến một thiên thạch.phương pháp với nhiệm vụ của bạn có chứa 'this.unblock' nội dung trong phương thức từ' this.unblock' sẽ chạy trong một sợi mới để không chặn các máy khách khác. Về những thứ khác mà thiên thạch có thể gửi, tôi khuyên bạn nên tính số lượng phòng bằng cách thu thập: http://stackoverflow.com/questions/10565654/how-does-the-messages-count-example-in-meteor-docs-work một nơi tốt để bắt đầu, nó phụ thuộc vào chính xác những gì bạn muốn gửi xuống. – Akshat
Bạn có thể thử gọi số Meteor.setInterval
trên máy chủ (có thể là Meteor.startup
). Điều đó sẽ hoạt động, mặc dù nó có thể không linh hoạt như giải pháp cron.
Ý tưởng là tôi có thể có các quy trình độc lập, thậm chí tách chúng ra giữa nhiều máy chủ. Vì vậy, thực sự, nặng nề trên máy công nhân. – Mitar
Đến http://atmospherejs.com và tìm kiếm cron
Tốt nhất tôi thấy là percolate:synced-cron
Lắp đặt
meteor add percolate:synced-cron
Khái niệm cơ bản
SyncedCron.add({
name: 'Crunch some important numbers for the marketing department',
schedule: function(parser) {
// parser is a later.parse object
return parser.text('every 2 hours');
},
job: function() {
var numbersCrunched = CrushSomeNumbers();
return numbersCrunched;
}
});
SyncedCron.start();
nâng cao
- 1. có bất kỳ ứng dụng khách redis php nào hỗ trợ kết nối liên tục không?
- 2. Meteor không kết nối với MongoDB
- 3. làm thế nào meteor có thể được ghép nối với một ứng dụng android?
- 4. Struts 2 - Tác vụ được ánh xạ hoạt động với bất kỳ URL nào
- 5. Kết nối hai ứng dụng Meteor bằng DDP
- 6. Xdebug: kết nối từ bất kỳ máy chủ nào
- 7. Phát hiện ngắt kết nối ứng dụng khách trong dịch vụ web
- 8. Không gọi được doBecomeActive nếu tác vụ nền hết hạn
- 9. Chi tiết kết nối & thời gian chờ trong ứng dụng khách dịch vụ web java
- 10. Bản ghi được liên kết với bất kỳ bảng nào?
- 11. Sử dụng tệp ứng dụng resw từ tác vụ nền
- 12. xdebug không kết nối với khách hàng?
- 13. Phản ứng chỉ phía máy khách với Meteor?
- 14. ShareActionProvider không có bất kỳ thanh tác vụ nào trong android
- 15. Khách hàng SignalR với nhiều kết nối
- 16. XMPP framework - Ứng dụng dựa trên vị trí được kết nối trong nền
- 17. Hủy tác vụ nền
- 18. Có thể nhắc người dùng nhập liệu trong bất kỳ tác vụ grunt nào không?
- 19. Không thể kết nối với Glassfish bằng cách sử dụng bất kỳ trình gỡ lỗi
- 20. Lỗi Visual Studio: "Không thể kích hoạt tác vụ nền. Không thể kích hoạt tác vụ nền."
- 21. Không thể kết nối với Dịch vụ cốt lõi Tridion từ máy khách Android
- 22. MySql * hoàn toàn ngẫu nhiên * Không thể kết nối với bất kỳ máy chủ MySQL nào được chỉ định
- 23. Bất kỳ sự khác biệt nào giữa kết nối socket và kết nối tcp?
- 24. Thực hiện tác vụ nền trong Javascript
- 25. tác vụ nền java
- 26. Có bất kỳ ứng dụng mẫu ứng dụng nào của Google được viết bằng Java không?
- 27. KEY_WOW64_64KEY có bất kỳ tác dụng nào đối với Windows 32 bit không?
- 28. Kết nối với ActiveResource/ActiveRecord với máy khách Delphi
- 29. Cách liên kết với bất kỳ cổng nào có sẵn?
- 30. HandleError thuộc tính không có bất kỳ tác dụng
Xin lưu ý rằng không có những điều như một "chủ đề của khách hàng" trong Meteor, trái với các giải pháp truyền thống hơn. Yêu cầu của khách hàng được xử lý không đồng bộ, không phải đa luồng. –
Bạn nói đúng. Họ là sợi, một hợp tác đa tác vụ. – Mitar