2012-01-17 10 views
6

Tôi có một ứng dụng web đang chạy với sự hỗ trợ cho một số phần cứng cụ thể. Điều này đạt được trong các bước sau:Hỗ trợ phần cứng từ một ứng dụng web

  1. Người dùng chạy trình cài đặt nhỏ đặt tệp java (và một số khác người khác) trên máy khách. Phần chính là một lọ được gọi là "hardwareManager"
  2. Ứng dụng web lượt truy cập của người dùng. Ứng dụng web chạy một applet java, do một tệp .java.policy được đặt trong khi cài đặt, có sự cho phép để tương tác với máy khách bên ngoài hộp cát trình duyệt.
  3. Applet kiểm tra để đảm bảo phần cứngManager đang chạy, và nếu không chạy lệnh để khởi động nó.
  4. Người dùng tương tác với ứng dụng web gửi lệnh đến applet qua javascript. Các applet sau đó viết lệnh vào một tập tin văn bản trên máy khách. Tệp văn bản được theo dõi liên tục bởi Bộ quản lý phần cứng chạy bất kỳ lệnh nào mà nó đọc.

Tác phẩm này, nhưng có vẻ khó khăn. Tôi có một vài ý tưởng về cách cải thiện nó, nhưng tôi không biết cái nào, nếu có, thậm chí còn đáng để thử.

Sẽ tốt hơn nếu bạn thiết lập phần cứngManager làm một socketServer và có applet kết nối trực tiếp với nó, thay vì duyệt qua các tệp văn bản? Điều đó thậm chí có thể?

Có cách nào để loại bỏ hoàn toàn applet và có javascript nói chuyện trực tiếp với phần cứngManager không? Có thể bằng cách viết phần cứngManager để trở thành một máy chủ http địa phương? Cổng nào sẽ chạy? Làm hạn chế javascript xss phù hợp ở đây một nơi nào đó?

+3

Nếu bạn làm cho phần cứngManager chấp nhận yêu cầu HTTP, chắc chắn bạn có thể được truy cập trực tiếp bởi JS, thậm chí tốt hơn bạn có thể thiết kế nó để thực hiện các lệnh như một dịch vụ web REST. XSS: không phải là vấn đề ở đây. Bạn sẽ cần tất nhiên để có phần cứngManager chạy cho nó để chấp nhận các lệnh, và một cách để biết trên cổng nào. – Viruzzo

+0

thêm vào câu trả lời của @Viruzzu, bạn có thể sử dụng [Jetty] (http://docs.codehaus.org/display/JETTY/Embedding+Jetty) cho phép dễ dàng nhúng một máy chủ http bên trong một ứng dụng java. sau đó bạn chỉ cần chuyển mã javascript đến localhost để tương tác với phần cứng Viruto của bộ vi xử lý hardwareManager –

+1

, hãy làm cho câu trả lời đó để tôi có thể bỏ phiếu cho nó. – pkh

Trả lời

2

Sẽ ít khó khăn hơn khi khởi động ứng dụng Java bằng cách sử dụng Java Web Start. Điều này sẽ loại bỏ sự cần thiết phải daemonize hoặc cài đặt trình quản lý phần cứng Java.

Một cách khác là sử dụng trình duyệt tích hợp bên trong Java. Tôi cho rằng đây không phải là một lựa chọn, vì bạn phụ thuộc rất nhiều vào Javascript (tôi cho rằng để cung cấp trải nghiệm khách hàng phong phú).

Nếu bạn đã phải cài đặt một thứ gì đó trên máy khách, tại sao bạn chọn lựa một ứng dụng web?

Nói từ kinh nghiệm: Chúng tôi đã có một ứng dụng Java EE cần thiết để in cho máy in PoS tại trang web của khách hàng. Chúng tôi đã cài đặt một ứng dụng "đồng bộ hóa" nhỏ kết nối thông qua SSH và đồng bộ hóa tất cả các tệp của máy khách. Sau đó, nó tải JAR và thực hiện chương trình. Chương trình này kết nối thông qua RMI với máy chủ và đăng ký hàng đợi JMS để nhận các bài tập in.

Áp dụng cho trường hợp của bạn: Tại sao không để ứng dụng Java của bạn kết nối trực tiếp với máy chủ? Bạn có thể sử dụng HTTP, SOAP hoặc thậm chí JMS trên RMI. Sau đó, bạn có thể khởi chạy lệnh phần cứng từ máy chủ (thay vì từ môi trường webbrowser JavaScript có giới hạn). Bằng cách này, bạn nhận được rất nhiều tính năng: xác thực, đệm các lệnh và thậm chí bạn có thể chia sẻ phần cứng giữa nhiều máy khách.

Schematic:

    <----AJAX------> Web browser 
ApplicationServer     
        <---HTTP/SOAP--> Java hardware manager application 

Bạn có thể khởi chạy các ứng dụng Java sử dụng Java Web Start, cho phép bạn cập nhật các ứng dụng tự động (thay vì cần phải vượt qua tất cả các khách hàng một trình cài đặt mới).

+0

'Nếu bạn đã phải cài đặt một cái gì đó trên máy khách, tại sao bạn lại chọn một ứng dụng web? 'Nó chủ yếu là một ứng dụng web và bây giờ cần phải có sự hỗ trợ phần cứng tùy chọn cho một số người dùng. –