2012-08-06 4 views
5

Tôi đang làm việc trên một dự án Kiểm tra trực tuyến chỉ để đạt được kiến ​​thức. Có thể xảy ra trường hợp mất điện và khi một ứng cử viên đăng nhập lại, thì thời gian lãng phí trong quá trình mất điện phải được đưa ra. Nhưng trong mã số javascript của mình, bài kiểm tra kết thúc sau 2 giờ chính xác tương ứng với thời gian máy chủ (AJAX được sử dụng tại đây). Sau khi thời gian kết thúc, học sinh được chuyển đến trang chủ. Tôi đã nghĩ về một giải pháp nhưng tôi không tìm thấy một sự khởi đầu để thực hiện nó.Nếu mất điện xảy ra trong quá trình kiểm tra trực tuyến, làm cách nào để cập nhật thời gian còn lại khi người dùng đăng nhập lại vào cổng?

Vì phiên này được duy trì nên tôi có thể duy trì thời gian sử dụng từ 2 giờ và có thể được lưu trữ trong database. khi anh ta relogin sau đó rằng hàng cụ thể tương ứng với anh ta có thể được kiểm tra và thời gian có thể được cập nhật.

Nhưng tôi không thể triển khai. Hãy cho tôi biết nếu có một giải pháp khác cho nó hoặc hướng mà tôi đang nghĩ là đúng hay sai.

Đồng hồ kiểm tra sẽ tiếp tục lại từ đầu 2 giờ. Nó không tiếp tục từ thời điểm mà đã được đánh dấu khi mất điện đã có. Điều tương tự của nó cho dù một mất điện xảy ra hoặc một ứng cử viên đăng nhập trở lại một lần nữa trong trường hợp này ít nhất. Và tôi không yêu cầu bất kỳ mã nào cho vấn đề này. Tôi chỉ muốn một gợi ý hoặc một hướng mà tôi có thể nghĩ đến. Tôi chỉ muốn biết cái gì có thể là khái niệm đằng sau nó.

+1

Bạn có thể làm rõ một chút không? Liệu 'đồng hồ kiểm tra' chỉ tiếp tục sau khi ứng viên đăng nhập lại hoặc khi hệ thống trở lại trực tuyến? Câu hỏi là hoàn toàn làm thế nào để thực hiện đề án này? Bạn có thể đăng bản tóm tắt ngắn gọn về những gì được triển khai không? –

+0

Đồng hồ kiểm tra tiếp tục lại từ đầu 2 giờ. Nó không tiếp tục từ thời điểm mà đã được đánh dấu khi mất điện đã có. Điều tương tự của nó cho dù một mất điện xảy ra hoặc một ứng cử viên đăng nhập trở lại một lần nữa trong trường hợp này ít nhất. Và tôi không yêu cầu bất kỳ mã nào cho vấn đề này. Tôi chỉ muốn một gợi ý hoặc một hướng mà tôi có thể nghĩ đến. Tôi chỉ muốn biết cái gì có thể là khái niệm đằng sau nó. –

+1

Từ sự hiểu biết của tôi, bạn đang thực hiện một hệ thống kiểm tra trực tuyến, nơi có khả năng mất điện hoặc một số lý do khác do đó bộ hẹn giờ nên dừng lại. Tôi nghĩ rằng nó có thể là một ý tưởng tốt để có phía khách hàng gửi một tín hiệu "nhịp tim" đến máy chủ mỗi 5 giây hoặc lâu hơn. Nếu "heartbeat" dừng lại, máy chủ biết client đã chết (do mất điện, đóng vô tình tab vv) và có thể dừng đồng hồ và khởi động nó khi trình kiểm tra đăng nhập lại. Vui lòng cập nhật câu hỏi của bạn nếu hiểu biết của tôi không chính xác – Jay

Trả lời

4

Chính thức hóa vấn đề một chút:

  • đăng nhập Một người sử dụng trong và bắt đầu kỳ thi của họ tại t0. Bài kiểm tra của họ kết thúc tại t120.
  • Tại một số điểm (x phút vào kỳ thi) trước khi kết thúc bài kiểm tra (tx) có mất điện và những người đang được kiểm tra phải tiếp tục bài kiểm tra.
  • Tại một số thời điểm sau tx, ty hệ thống trở lại trực tuyến.
  • Tại một số thời điểm sau hoặc bằng ty, người dùng đăng nhập lại, gọi nó là tz. Như bạn đã chỉ ra, giá trị này bằng ty.
  • Chúng được hưởng 120 - x thêm phút để hoàn thành bài kiểm tra. Điểm mà tại đó bài kiểm tra kết thúc bây giờ là tz + (120 - x).

Giải pháp:

Nguyên nghĩ đến một cách tiếp cận rất phiên theo định hướng, nhưng điều này có thể là cách để đi:

  • Thực hiện một đồng hồ rộng hệ thống (suy nghĩ " nhịp tim ") với khoảng thời gian p. Đối với mỗi khoảng thời gian p mà hệ thống là lên, tăng một truy cập toàn cầu.
  • Ghi t0 làm bộ đếm toàn cầu này cho mỗi lần kiểm tra.
  • Trong một hàng khác, hãy cập nhật thời gian đã trôi qua để kiểm tra. Đây là giá trị hiện tại của t0. Trong mã của bạn, bạn có thể có chức năng để lưu công việc của họ đang tiến hành, cập nhật thời gian đã trôi qua ở đó. Cũng cập nhật thời gian trôi qua trên mỗi lần tải trang/phần. Lưu ý rằng nếu một số công việc bị mất giữa lần cập nhật thời gian trôi qua cuối cùng/đang tiến hành lưu, họ sẽ nhận được thời gian 'quay lại' kể từ lần cập nhật cuối cùng chưa bao giờ được lưu trữ.
  • Khoảng thời gian p sẽ là quyết định chính sách. Về lý thuyết, ai đó có thể đạt được thêm p để hoàn thành bài kiểm tra của họ tùy thuộc vào thời điểm thất bại. Nếu p là 1 giây, nó không phải là một việc lớn. Nếu đó là 5 phút, đó là một thỏa thuận lớn hơn. Tất nhiên sẽ có sự cân bằng hiệu suất cho các giá trị khác nhau của p. Cũng vì chúng ta không xử lý các hệ thống thời gian thực ở đây, có thể có một số sai lệch với p.
  • Sử dụng giao dịch cho mọi thứ. Khi hệ thống tiếp tục (và trước khi đồng hồ toàn cầu bắt đầu đánh dấu lần nữa), bất kỳ giao dịch nào bị gián đoạn sẽ cần được khôi phục.
+1

Giải pháp của tôi tập trung chủ yếu vào phía máy chủ bị lỗi. @Jayraj 's bình luận ở trên có thể có khả năng được xếp vào này để tài khoản cho khách hàng ngắt kết nối bên (nếu đó là mong muốn). –

+0

Cả hai giải pháp đều được chấp nhận. Cảm ơn cả hai người. :) –

0

bạn có thể sử dụng Websockets để triển khai truyền thông máy chủ khách. Websockets cung cấp healthchek riêng của mình. Nó có các phương thức như onOpen() và onClose() nhận các sự kiện khi mở hoặc đóng kết nối.