Tôi chỉ tìm thấy bài đăng này, nó cũ, nhưng khái niệm bỏ phiếu mang lại nhiều khó khăn cho rất nhiều bài thơ. Vì vậy, tôi sẽ đặt một ví dụ thực hiện ở đây. Nhưng trước khi đưa nó cho bạn, tôi nên cung cấp cho bạn một lời khuyên khiến tôi nổi giận trước đây:
Khi bạn thăm dò ý kiến, bạn nên quan tâm đến hành vi phiên (race conditions). Để làm cho nó đơn giản: nếu bạn mở một phiên, tệp phiên bị khóa cho đến khi phiên được đóng để tránh 2 người viết ghi dữ liệu khác nhau vào nó. Vì vậy, nếu bạn cần một phiên để kiểm tra xem người dùng đã đăng nhập hay chưa, hãy luôn đóng phiên trước khi bỏ phiếu.
Bản trình diễn của tôi cung cấp cho bạn một ví dụ về triển khai bỏ phiếu trong PHP. Tôi sẽ không sử dụng một cơ sở dữ liệu, mà là một tập tin thay thế. Khi bạn nhấp vào nút bỏ phiếu, bạn sẽ nhập vòng lặp và cho đến khi tệp được sửa đổi, bạn sẽ vẫn bỏ phiếu. Khi bạn điền vào biểu mẫu và nhấp vào Phát hành, những gì bạn đã nhập sẽ được lưu vào tệp. Thời gian sửa đổi của tệp sẽ thay đổi để việc bỏ phiếu sẽ dừng lại.
Mẹo: sử dụng công cụ như Firebug để xem điều gì đang xảy ra.
Bây giờ cho phép nói chuyện trong một Langage tốt hơn so với tiếng anh của tôi:
<?php
// For this demo
if (file_exists('poll.txt') == false) {
file_put_contents('poll.txt', '');
}
if (isset($_GET['poll'])) {
// Don't forget to change the default time limit
set_time_limit(120);
date_default_timezone_set('Europe/Paris');
$time = time();
// We loop until you click on the "release" button...
$poll = true;
$number_of_tries = 1;
while ($poll)
{
// Here we simulate a request (last mtime of file could be a creation/update_date field on a base)
clearstatcache();
$mtime = filemtime('poll.txt');
if ($mtime > $time) {
$result = htmlentities(file_get_contents('poll.txt'));
$poll = false;
}
// Of course, else your polling will kill your resources!
$number_of_tries++;
sleep(1);
}
// Outputs result
echo "Number of tries : {$number_of_tries}<br/>{$result}";
die();
}
// Here we catch the release form
if (isset($_GET['release']))
{
$data = '';
if (isset($_GET['data'])) {
$data = $_GET['data'];
}
file_put_contents('poll.txt', $data);
die();
}
?>
<!-- click this button to begin long-polling -->
<input id="poll" type="button" value="Click me to start polling" />
<br/><br/>
Give me some text here :
<br/>
<input id="data" type="text" />
<br/>
<!-- click this button to release long-polling -->
<input id="release" type="button" value="Click me to release polling" disabled="disabled" />
<br/><br/>
Result after releasing polling :
<div id="result"></div>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script>
<script type="text/javascript">
// Script to launch polling
$('#poll').click(function() {
$('#poll').attr('disabled', 'disabled');
$('#release').removeAttr('disabled');
$.ajax({
url: 'poll.php',
data: {
poll: 'yes' // sets our $_GET['poll']
},
success: function(data) {
$('#result').html(data);
$('#poll').removeAttr('disabled');
$('#release').attr('disabled', 'disabled');
}
});
});
// Script to release polling
$('#release').click(function() {
$.ajax({
url: 'poll.php',
data: {
release: 'yes', // sets our $_GET['release']
data: $('#data').val() // sets our $_GET['data']
}
});
});
</script>
Bạn có thể thử nó here
Nguồn
2012-09-14 19:08:29
được kỹ thuật này rquired có tomcat thêm vào thứ ba trên thư viện ..etc sao chổi? hoặc có thể phục vụ trên servlet điển hình? có bất kỳ ứng dụng demo/làm việc nào mà chúng tôi có thể tham khảo không? – cometta
có thể cho chúng ta thấy ví dụ về comet.aspx? – cometta
Kỹ thuật này không yêu cầu bất cứ thứ gì ngoài IIS6 và .NET để khởi động và chạy. –