2012-07-06 24 views

Trả lời

15

Vấn đề với nhân viên web là chúng không thực sự phù hợp với mô hình GWT/Java chuẩn - theo ý kiến ​​của tôi, chúng hầu như không vừa với mô hình JS chuẩn.

Nhân viên web hoạt động bằng cách truyền dữ liệu qua lại giữa các máy ảo JavaScript cơ bản khác nhau. Dữ liệu đó phải ở dạng một chuỗi và mỗi công nhân phải tải riêng JS của nó. Điều này có nghĩa là không có biến nào được khai báo trong một công nhân (hoặc trang chính) có thể truy cập từ một nhân viên khác, trừ khi nó được chuyển như một phần của dữ liệu chuỗi, được đẩy qua lại giữa các công nhân.

Vậy cách tính năng này hoạt động khi bạn xem xét GWT/Java? Từ phối cảnh Java, điều này không tương đương với nhiều luồng, nhưng nhiều JVM! Các quy trình khác nhau chỉ có thể giao tiếp bằng cách truyền các chuỗi (hoặc quan trọng hơn, không phải các đối tượng Java) qua lại và không thể chia sẻ bất kỳ trạng thái nào khác. Thậm chí các biến tĩnh có thể khác nhau giữa hai máy ảo.

Từ liên kết bạn đã đăng, hãy xem nguồn của JsWorker - bạn có thể tạo phiên bản này qua JsWindow.newWorker với url của tập lệnh JS để bắt đầu và JsWorker hỗ trợ các phương pháp để nghe câu trả lời và gửi tin nhắn để cho nó hoạt động.

Tập lệnh đó có thể là đối tượng được biên dịch GWT - nhưng nó sẽ là một mô-đun và điểm nhập riêng biệt so với ứng dụng ban đầu, để nó chỉ có mã có thể chạy hợp lý và không cố bắt đầu vẽ trên trang khi nó tải. Nó có lẽ sẽ cần phải sử dụng một mối liên kết mà sẽ chỉ tải JS, và sẽ không giả định một khung nội tuyến trên 'trang'.

Dự án GWT-NS có một số mẫu công nhân web đã được xây dựng bằng cách sử dụng trình liên kết của riêng họ để xây dựng các tệp js để tải trong công nhân và một số phần tiện lợi khác.

+0

Câu trả lời hoàn hảo. Cảm ơn bạn! – JAre