2013-08-07 36 views
9

Tôi đã nhận các số examples hiển thị bỏ phiếu và bỏ phiếu dài trong javascript, tuy nhiên tôi không hiểu chúng khác nhau như thế nào. Đặc biệt liên quan đến ví dụ bỏ phiếu dài, làm cách nào để kết nối của nó luôn mở?bỏ phiếu và bỏ phiếu dài

Đây là những gì kịch bản bầu cử truyền thống trông giống như:

(function poll(){ 
    setTimeout(function(){ 
    $.ajax({ url: "server", success: function(data){ 
     //Update your dashboard gauge 
     salesGauge.setValue(data.value); 

     //Setup the next poll recursively 
     poll(); 
    }, dataType: "json"}); 
    }, 30000); 
})(); 

và đây là ví dụ bỏ phiếu dài:

(function poll(){ 
    $.ajax({ url: "server", success: function(data){ 
    //Update your dashboard gauge 
    salesGauge.setValue(data.value); 

    }, dataType: "json", complete: poll, timeout: 30000 }); 
})(); 

Cảm ơn!

Trả lời

12

Sự khác biệt là: việc bỏ phiếu dài cho phép một số loại thông báo hướng sự kiện, do đó máy chủ có thể chủ động gửi dữ liệu cho khách hàng. Bình chọn bình thường là kiểm tra định kỳ dữ liệu để tìm nạp, do đó, để nói. Wikipedia khá chi tiết về điều đó:

Với phiếu thăm dò ý kiến ​​dài, khách hàng yêu cầu thông tin từ máy chủ theo cách tương tự như bình chọn bình thường; tuy nhiên, nếu máy chủ không có bất kỳ thông tin nào có sẵn cho khách hàng, sau đó thay vì gửi một phản hồi trống, máy chủ sẽ giữ yêu cầu và chờ thông tin có sẵn (hoặc cho một sự kiện thời gian chờ phù hợp), sau đó phản hồi đầy đủ là cuối cùng đã được gửi cho khách hàng.

Bỏ phiếu dài làm giảm lượng dữ liệu cần gửi vì máy chủ chỉ gửi dữ liệu khi có dữ liệu thực sự IS, do đó khách hàng không cần kiểm tra tại mọi khoảng thời gian x.

Nếu bạn cần một cách thực hiện giao tiếp khách/máy chủ full duplex hoàn chỉnh hơn, hãy cân nhắc sử dụng giao thức WebSocket, thật tuyệt vời!

+1

Khách hàng có thể cho biết sự khác biệt giữa việc bỏ phiếu dài và phản hồi chậm không? Dường như với tôi rằng bỏ phiếu và bỏ phiếu dài về cơ bản là giống nhau. Bỏ phiếu: "Khách hàng: Đã sẵn sàng chưa? Máy chủ: Không". Cuộc thăm dò dài: "Khách hàng: Đã sẵn sàng chưa? Máy chủ: ... Không". – DavidS

+0

@Davids: Đây là sự khác biệt: Với cuộc thăm dò ý kiến, khách hàng hỏi và nhận câu trả lời ngay lập tức "có/hoặc". Với phiếu thăm dò ý kiến ​​dài, khách hàng hỏi nhưng * không * nhận được câu trả lời ngay lập tức. Máy chủ không trả lời câu hỏi cho đến khi có * là * cái gì đó mà anh ta có thể trả lời. Vì vậy, câu hỏi đang chờ giải quyết mọi lúc. – Robert

+0

@Robert điều gì xảy ra nếu có sự kiện hết thời gian chờ và máy chủ không thể gửi dữ liệu trong cuộc thăm dò ý kiến ​​dài? Khách hàng có nên gửi cùng một yêu cầu không? –

2

Thăm dò về cơ bản là quy trình kiểm tra định kỳ máy chủ để biết thông tin sau khi thực hiện yêu cầu của khách hàng. Nếu thông tin được yêu cầu có sẵn, thông tin sẽ được gửi tới máy khách dưới dạng phản hồi, nếu không máy chủ sẽ gửi phản hồi trống. Việc bỏ phiếu được thực hiện với sự trợ giúp của các chức năng như setInterval() và setTimeout().

Trong trường hợp dài Polling, khách hàng làm cho một yêu cầu đến máy chủ và nếu câu trả lời là có sẵn, server trả lời với thông tin nếu không, nó giữ yêu cầu cho đến khi thông tin cần thiết là không có sẵn. Không giống như việc bỏ phiếu truyền thống, nơi máy chủ sẽ phản hồi với phản hồi trống.

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