gpt4 book ai didi

perl - Websockets 和使用 Mojolicious 冲洗?

转载 作者:搜寻专家 更新时间:2023-10-31 19:27:22 25 4
gpt4 key购买 nike

我正在使用 Mojolicious::Lite 模块来运行 websockets 服务器来处理协议(protocol)。这是我目前用于客户端的测试代码:

socket.onopen = function(){$.each(proxies, function(){socket.send(this);});}
socket.onmessage = function(response){alert(response);}

和服务器

websocket '/' => sub { 
my $self = shift;
$self->on(message => sub {
my ($self, $message) = @_;
my @info = split /-/,$message;

$mech_proxy = WWW::Mechanize->new(timeout=>$info[1], autocheck=>0);
$self->send(test_proxy($info[0]) => sub{sleep(int(rand(10)))});
});
};
app->start;

无论如何,我认为这显然可以避免刷新输出的需要,因为最初我实际上只执行一个发送客户端,然后在服务器端循环发送返回消息;这没有用,因为我无法刷新输出并且必须等待循环完成。然而改变它并没有帮助,因为我仍然必须等到最后一个服务器端发送完成,然后数据才会发送到客户端。您知道我如何获得处理过程中的实时“更新”,即在发送时输出服务器响应吗?

编辑:我使用 setTimout(socket.send(this),1000) 得到了混合结果。我的想法是,可能为了刷新数据,只有在处理完先前的数据并将其完全写入服务器端后,才必须发送新数据。如果事实证明这是正确的,那么应该可以编写客户端,使其仅在收到先前发送的数据的结果后才发送新数据;这将达到获得所需“实时”更新的效果。

干杯

最佳答案

OK 解决了,就像上面说的,新数据必须在收到返回响应(下面的代码)后才发送。另外请注意,令人惊讶的是,这种方式实际上比使用 jquery 循环更快。

socket.onopen = function(){
socket.send(proxies[0]+'-'+timeout);
proxies.splice(0,1);
}

socket.onmessage = function(response){
if (proxies.length > 0) {
socket.send(proxies[0]+'-'+timeout);
proxies.splice(0,1);
}
document.write(response.data);
}

关于perl - Websockets 和使用 Mojolicious 冲洗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9853716/

25 4 0
文章推荐: html - 如何用一个占用额外空间的元素创建一个
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com