Я использую модуль Mojolicious :: Lite для запуска сервера веб-сокетов для обработки протокола. Это код тестирования, который я сейчас использую для клиента:
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;
Во всяком случае, я думал, что это явно избавит от необходимости сбрасывать выходные данные, так как первоначально я фактически делал только одну сторону отправки клиента, а затем отправлял сообщение возврата в цикле на стороне сервера; это не сработало, потому что я не смог бы сбросить вывод и должен был ждать окончания цикла. Однако его изменение не помогло, так как мне все еще нужно ждать, пока будет выполнена последняя отправка на стороне сервера, и только тогда данные будут отправлены клиенту.
Есть ли у вас какие-либо идеи, как я могу получать живые «обновления» при обработке, то есть выводить ответ сервера по мере его отправки?
EDIT:
Я получаю смешанные результаты с setTimout(socket.send(this),1000)
. Я подумал, что, вероятно, для сброса данных новые данные должны отправляться только после того, как предыдущие данные были обработаны и полностью записаны на стороне сервера. Если это окажется действительно правильным, должна быть возможность написать на стороне клиента, чтобы он отправлял новые данные только после того, как получил результаты от предыдущих отправленных данных; это обеспечит эффект получения нужных «живых» обновлений.
Приветствия