我正在用
Python编写一个cgi页面.假设客户端向我的cgi页面发送请求.我的cgi页面进行计算,一旦它有第一个输出,它就会将该输出发送回客户端,但它会继续进行计算并在发送第一个响应后发送其他响应.
我在这里介绍的可能吗?我问这个问题,因为在我有限的知识中,在cgi页面中,响应是一次性发回的,一旦发送响应,cgi-page就会停止运行.这件事是在服务器端或客户端进行的,我该如何实现呢?
我的服务器正在运行Apache.非常感谢你.
我在这个论坛中尝试过“dbr”的客户端代码(感谢他,我知道了多长时间轮询的工作原理).
BargePollerbody{ background:#000;color:#fff;font-size:.9em; }
.msg{ background:#aaa;padding:.2em; border-bottom:1px #000 solid}
.old{ background-color:#246499;}
.new{ background-color:#3B9957;}
.error{ background-color:#992E36;}
function addmsg(type, msg){
/* Simple helper to add a div.
type is the name of a CSS class (old/new/error).
msg is the contents of the div */
$("#messages").append(
"
);
}
function waitForMsg(){
/* This requests the url "msgsrv.php"
When it complete (or errors)*/
$.ajax({
type: "GET",
url: "msgsrv.php",
async: true, /* If set to non-async, browser shows page as "Loading.."*/
cache: false,
timeout:50000, /* Timeout in ms */
success: function(data){ /* called when request to barge.php completes */
addmsg("new", data); /* Add response to a .msg div (with the "new" class)*/
setTimeout(
'waitForMsg()', /* Request next message */
1000 /* ..after 1 seconds */
);
},
error: function(XMLHttpRequest, textStatus, errorThrown){
addmsg("error", textStatus + " (" + errorThrown + ")");
setTimeout(
'waitForMsg()', /* Try again after.. */
"15000"); /* milliseconds (15seconds) */
},
});
};
$(document).ready(function(){
waitForMsg(); /* Start the inital request */
});
BargePoll message requester!
这是我的服务器代码:
import sys
if __name__ == "__main__":
sys.stdout.write("Content-Type: text/html\r\n\r\n")
print "
"for i in range(10):
print "
sys.stdout.flush()
print ""
我希望我的客户端页面一次显示1个数字(0,1,2,…),但数据总是一次出现(01234 …).请帮我搞清楚.非常感谢你们.
只是有点偏离轨道,我试图使用jquery彗星插件,但我找不到足够的文档.非常感谢帮助.再次感谢:D
[编辑]好的家伙,最后感谢您的指南,我已设法使其工作.当你预测mod_deflate是所有这些的来源时,你是对的.
总结一下,我在这里做了什么:
>对于客户端,请将长轮询页面作为上面的html代码
>对于服务器,通过以下方式禁用mod_deflate:编辑文件/etc/apache2/mods-available/deflate.conf,注释掉带有text / html部分的行并重新启动服务器.要确保Python不缓冲输出本身,请在页面开头包含#!/usr/bin/python -u.请记住在每次打印后要在客户端显示时使用sys.stdout.flush().效果可能不透明,应包括time.sleep(1)来测试. :d
非常感谢你们支持和帮助解决这个问题:D