Flex: PHP + Flex üzerinden gerçek zamanlı olarak bir C dosyasının Çıktı?

3 Cevap php

Ben bir C yürütülebilir (myprogram adında) var. Ben bunu çalıştırdığınızda ./myprogram benim Linux kabuk standart çıktı bazı çıktı ifadeleri olsun.

Ben standart çıktıya yazdırılır ediliyor olursa olsun erişmek için run.php kullanılır:

#run.php
<?php
$output = shell_exec('./myprogram');
echo $output;
?>

Sonra bu run.php dosyaya erişmek için bir HTTPService id sahip = "hizmet" olarak adlandırılan ve ben de {} service.lastResult bir TextArea metin niteliğini ayarlayın. Ben bir an için benim Flex uygulaması, duraklardan arayüzü tür çalıştırmak ve ardından TextArea kerede tüm 20 satırları görüntüler.

Program Linux kabuğundan çalıştırılan Ama eğer onlar birer birer görüntülenir.

Ben en kısa sürede standart çıktıya yazdırılır alır gibi satırını göstermek hangi bir yolu var mı? Bu daha sonra TextArea gerçek zamanlı olarak çıkış gösteriyor yapacaktır.

Yoksa Flex bunu değiştiremiyor? Aksine nasıl bir PHP programı gibi etki gösteren, yani elde edebilirsiniz, ne olursa olsun aynı anda gerçek zamanlı olarak tarayıcıda standart çıktıya basılır ediliyor?

Update: Let's make the question little more specific and/or simple.

myprogram Bazı mikrosaniye sonra 20 satırları her çıktılar. Ben program daha sonra programı çalıştırmaya devam edebilir ederken Flex TextArea veya tarayıcıda (ama gerçek zamanlı) görünmesini standart çıkış yalnızca ilk satırını istiyorum.

Basit gibi görünmüyor: P

3 Cevap

HTTP bu şekilde çalışmıyor. Sen comet ile taklit edebilirsiniz. Java Sen flash istemci sunucudan veri bastırıyor için BlazeDS'i kullanabilirsiniz.

Eğer C programın kaynağını değiştirebilir miyim? Bu davranışın nedeni, C diye standart çıkış hattı tamponlu olduğunu olabilir, ancak program bir terminalde çalışır sadece. Standart çıkış bir dosya veya boru (bu olduğunu düşünüyor) eğer büyük parçalar tampon olacaktır. Bu nedenle, C programı belki de sonuna kadar herhangi bir veri göndermez. Sen fflush veri yazdırma zorlamak için çağrı ekleyebilirsiniz:

#include <unistd.h>
#include <stdio.h>

int main(void) {
    printf("Hi!\n");
    fflush(stdout); /* Add this! */
    sleep(3);
    printf("Ho!\n");    
    return 0;
}

Ben henüz denemedim, ama passthru() fonksiyonuna bir göz atmak isteyebilirsiniz.

Edit: Bu muhtemelen {service.lastResult} aracılığıyla çünkü yönlendirme doğrudan çalışmaz. Ben esnek aşina değilim, ama son sonuç ateş almadan önce tam olduğu için bu beklemek olacağını varsayabiliriz. Yani hala işlerken servis çağrısı sonucu kapmak için izin veren bir alternatif bulmak gerekiyor - bu mümkün olup olmadığını bilmiyorum.

Kullanarak temel nokta passthru() size ara sonuçları kapmak için en azından bir şans vererek, doğrudan çağrılan komutunun çıktısını göndermek olacaktır. exec(), system() ve shell_exec(), diğer taraftan da tüm tamamlamadan önce bir şey göndermez, böylece ile başlamak için hiçbir geçici çözüm olabilir.