当hibernate关闭会话时,close的目的基本上是关闭底层连接并清理第一级缓存.为什么同花顺也不会在这里自动发生?
我创建了一个页面,我在其中使用PHP函数flush(),将数据输出到浏览器,第二个数据被回显.我也使用jQuery的ajax函数调用这个页面.它工作,但jQuery不会输出任何东西,直到整个页面执行,这种类型删除flush()的功能.
我怎样才能解决这个问题?
我的ajax调用看起来像这样:
jQuery.ajax({
type: "get",
url: url,
data: postdata,
success: function(retval) {
jQuery('#retdiv").html(retval);
}
})
Run Code Online (Sandbox Code Playgroud) 概观
我有一个客户端服务器,我streamWriter.WriteLine(messageToClient);在服务器上发送大量消息.该streamReader.ReadLine();客户端上阅读2000年长度的消息罚款.
这里的问题是streamWriter.Flush()对较大的消息没有影响,因为我的目标是服务器能够在缓冲区之间直接切换(具有流畅的服务器消息输出)而不是(服务器响应将混杂在一起)直到它达到缓冲区限制冲洗).
问题:我认为缓冲区是自动刷新的,因为它们已满?那么streamWriters的最大缓冲区大小是多少?
我已经测试使用更小messageToClient的流,并且流的不冲洗按预期工作.Aka服务器流一次向客户端输出一组小消息,大概是因为缓冲区已满.
我是一名软件工程专业的学生,我正在休假,为了在下学期学习更好,我一直在编写各种控制台应用程序来练习.但是我遇到了一个问题,我需要从用户那里得到整数输入.我一直在使用fgets来获取字符串stdin然后使用sscanf来获取整数(已经工作正常)但是如果用户输入的数量超过了我的缓冲区大小,则会在流中保留尾随字符(包括跳过我的下一个调用的换行符)fgets).我环顾四周,发现大多数人似乎都认为while(getchar() != '\n');这会导致我出现问题,因为如果没有换行字符,就会发生不必要的输入扫描.
例:
int ch;
char* buffer = (char*)malloc(BUFSIZ*sizeof(char));
while((ch = getchar()) != '\n' && ch != EOF);
fgets(buffer,BUFSIZ*sizeof(char),stdin);
Run Code Online (Sandbox Code Playgroud)
如果缓冲区不是太小而流中没有尾随字符,则会getchar()导致输入不必要.
输出:
A
A
You typed A
Intended Output:
A
You typed A
Run Code Online (Sandbox Code Playgroud)
我希望我说得够清楚,我感谢任何帮助.
例如,
这不起作用(Firefox 21,IE8):
<?php
function flush_buffers(){
ob_end_flush();
ob_flush();
flush();
ob_start();
}
ob_start();
echo 'Text 1<br />';
flush_buffers();
Sleep(2);
echo 'Text 2<br />';
flush_buffers();
Sleep(2);
echo 'Text 3<br />';
flush_buffers();
Sleep(2);
echo 'Text 4<br />';
?>
Run Code Online (Sandbox Code Playgroud)
但是这个有效:
<?php
function flush_buffers(){
echo str_pad('',4096);
ob_end_flush();
ob_flush();
flush();
ob_start();
}
ob_start();
echo 'Text 1<br />';
flush_buffers();
Sleep(2);
echo 'Text 2<br />';
flush_buffers();
Sleep(2);
echo 'Text 3<br />';
flush_buffers();
Sleep(2);
echo 'Text 4<br />';
?>
Run Code Online (Sandbox Code Playgroud)
我在Win XP SP3上运行PHP 5.4.11 VC9和Apache 2.4.3(apacheLounge).
在Node Web服务器中,我想在特定点刷新HTML内容,如下所示:
<html><head> ... </head><body> ... </body></html>例如:
var http = require('http');
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/html'});
res.write('<html><head> ... </head>');
setTimeout(function() {
res.write('<body> ... </body>');
setTimeout(function() {
res.end('</html>');
}, 2000);
}, 2000);
}).listen(8000);
Run Code Online (Sandbox Code Playgroud)
上面的代码<html><head> ... </head><body> ... </body></html>在一个块中响应~4s后,但是我注意到块应该> = 4096bytes才能立即刷新:
var http = require('http');
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.write(Array(4097).join('*'));
setTimeout(function() {
res.write(Array(4097).join('#'));
setTimeout(function() {
res.end('done!');
}, 2000);
}, 2000);
}).listen(8000);
Run Code Online (Sandbox Code Playgroud)
上面代码的响应也需要大约4秒,但是会立即刷新块.我可以填充小块来填充至少4096字节,只是想知道是否还有另一种"非hacky"方式.
在PHP中,这可以通过flush()/ ob_flush()和禁用来实现output_buffering
FWIW,我正在构建一个Web服务器工具来试验几个HTML块输出配置,并在它们之间有一个给定的延迟,以便分析现代浏览器如何处理它并选择最佳配置. …
作为一个非常新的os和命令行进程的php程序员,我很惊讶在python中,用户在与程序交互过程中输入的所有内容似乎都被缓冲,等待第一次使用时倒出的raw_input(例如).
找到一些代码来调用之前raw_input似乎"解决"osX上的问题,虽然据说它提供了对windows功能的访问:
class FlushInput(object):
def flush_input(self):
try:
import msvcrt
while msvcrt.kbhit():
msvcrt.getch()
except ImportError:
import sys, termios
termios.tcflush(sys.stdin, termios.TCIOFLUSH)
Run Code Online (Sandbox Code Playgroud)
我是否正确理解stdin和stdout,stderr方法会因操作系统而异?
我想像Django这样的框架可能有内置的方法来简化交互性,但它基本上只需要几行代码来告诉python"在被邀请之前不接受任何输入?"
看看以下四个程序.在Windows下使用Freepascal构建它们并运行,将输出重定向到任何文件,并注意它将花费的时间.
我的结果是:所有程序运行的时间大约相同(大约6秒),尽管第四个程序输出的字节数是100倍.这意味着第四个程序的每个输出字节的运行速度比其他字节的运行速度快得多.
对于第二个节目,缓慢的原因很明显:flush电话.对于第三个程序,原因并不那么明显,但假设每次调用writelnstdout都隐式刷新输出缓冲区可能是合理的.
但是,目前尚不清楚为什么第一个程序比第四个程序慢得多.然而,添加flush(output);(参见程序2)并不会改变时序的事实似乎意味着FPC甚至在每次刷新后都会刷新输出缓冲区write,这可以解释所有行为.仅当输出为stdout,甚至重定向时才会发生这种情况; 如果我使用assign/rewrite显式输出到特定文件,那么没有flush的程序运行速度比具有flush的程序要快得多 - 正如应该的那样.
在Linux下,运行时间为0.01秒,0.65秒,0.01秒,0.30秒(输出大100倍).这里显然flush()减慢程序,所以在Linux下FPC似乎不会每次刷新stdout.
我试图谷歌是否FPC真的刷新stdout缓冲区在每个输出(是它write或writeln),但没有找到任何信息,除了示例程序中的注释来自http://www.freepascal.org/docs-html的 flush函数文档/rtl/system/flush.html,评论提到a writeln到'output'总是会导致刷新[而不是write].但是,这个例子既没有在Windows下产生预期的输出,也没有在Linux下产生.实际上,输出似乎在Windows下的每次写入和写入之后刷新,重定向或不重定向,并且在输出未重定向时也在Linux下刷新.在具有重定向输出的Linux下,似乎根本没有隐式刷新.
所以,我的问题是:
write或者writeln在Windows上是否将输出重定向到文件?我的系统是在Kubuntu 14.04下的VirtualBox下使用FPC 2.6.4的Windows XP,以及使用FPC 2.6.2的Kubuntu 14.04本身.我没有机会尝试在真正的Windows机器上运行它,但我有理由相信那里的情况是一样的.
节目:
var i,j:integer;
s:string;
begin
for j:=1 to 1000 do begin
for i:=1 to 10 do
write('!');
end;
end.
Run Code Online (Sandbox Code Playgroud)
var i,j:integer;
s:string;
begin
for j:=1 to 1000 do begin
for i:=1 to 10 do begin
write('!');
flush(output); …Run Code Online (Sandbox Code Playgroud) 考虑这个Python脚本:
for i in range(4000):
print(i)
Run Code Online (Sandbox Code Playgroud)
和这个Perl脚本:
for my $i (0..4000-1) {
print $i, "\n";
}
Run Code Online (Sandbox Code Playgroud)
python3 pipe.py | head -n3000 >/dev/null 产生错误:
Exception ignored in: <_io.TextIOWrapper name='<stdout>' mode='w' encoding='UTF-8'>
BrokenPipeError: [Errno 32] Broken pipe
Run Code Online (Sandbox Code Playgroud)
但
perl pipe.pl | head -n3000 >/dev/null 不产生错误(在Perl v5.26.1中).
为什么Python和Perl之间存在这样的差异?如何让Perl产生类似的错误信息?
我有一个简单的脚本,从1到5000计数一个for循环.它将输出实时刷新到浏览器并显示带%的进度条.
我拥有:如果我离开页面,进程将中断.如果我回来,它从0开始.
我想要实现的目标:如果我离开页面,过程将继续,如果我回来,它会显示正确的百分比.
示例:我运行该过程,它计数到54,我离开页面10秒,当我回来时它显示我140并继续冲洗.
可能吗?