2010-07-21 10 views
5

Biraz kafa karıştırıcı başlık için özür dilerim. Bunun nasıl yapıldığını gerçekten bilmiyorum. Benim durumum şudur: Akademik bir simülasyon aracım var, benim için bir web geliştirme süreci geliştiriyorum. C++ tabanlı simülatör, küçük sistemler için hesaplama açısından oldukça verimli (ikinci bir çalışma zamanının onda biri ile yüzlerce arasında) olsa da, önemli miktarda (web uygulaması açısından) veri miktarını (~ 4-6mb) oluşturabilir. Kullanıcı index.html dosyasını erişirSunucu tarafı simülasyonu için büyük veri kümeleri nasıl kullanılır -> istemci tarayıcısı

  1. aşağıdaki- olarak

    Şu kurulduğundan. Sol taraftaki bu sayfa, kullanıcının simülasyon parametrelerini girebileceği etkileşimli bir forma sahiptir. Sağ tarafta, oluşturdukları sistemin bir temsili ve simülasyon verilerinin çeşitli grafikleri için bazı grileştirilmiş sekmeler vardır.

  2. Kullanıcı "Simülasyon çalıştır" ı tıklatır. Bu, istenen sim parametrelerini bir AJAX çağrısı yoluyla bir runSimulation.php dosyasına gönderir. runSimulation.php, gönderilen verilere dayanarak bir girdi dosyası oluşturur, daha sonra bu giriş dosyasını kullanarak simülatörü çalıştırır. Simülatör, çeşitli çıktı dosyalarında 4-6mb'lik veri yayıyor.
  3. Simülasyon tamamlandığında, tarayıcıya verilen yanıt, returnData.php dosyasını çağıran başka bir javascript işlevidir. Bu php betiği, çıktı dosyalarındaki verileri JSON verileri olarak paketler, JSON verilerini tarayıcıya döndürür, ardından veri dosyalarını siler.
  4. Bu yanıt verileri daha sonra tarayıcının javascriptindeki birkaç çizim nesnesine beslenir ve çizim sekmeleri etkinleşir. Kullanıcı daha sonra çizilen verilerle açılabilir ve etkileşime girebilir.

Bu kurulum ancak iki konu çalıştırıyorum, Tamam çalışıyor:

  • dönüş veri yüklenmesi zaman alabilir geri geliyor verilerin yavaş 4-6mb olduğunu. (Bu veri gziplidir, bu da tarafini önemli ölçüde azaltir, ancak yine de daha hizli bir baglantida 20+ saniye sürebilir)
  • Bir sonraki hedef, kullanicilarin, sonuçlari karsilastirabilecekleri çoklu simülasyon çalismalari çizmesine izin vermektir.

Düşüncelerim, kullanıcı oturumu etkinken, veri dosyalarını sunucuda tutmak isteyebileceğim. Bu, kullanıcının sadece görüntülemek istediği arsaya ilişkin verileri yükleyebilmesini (ve mevcut artalanın sonuçlarını görüntüledikçe arka planda diğer verileri yükleyebilmesini) sağlayacaktır. Birden fazla işlem için, sunucuda oturan birden fazla veri kümesine sahip olabilir, kullanıcının ihtiyaç duyduğu anda/zamanda indirmesi için hazır olabilir.

Ancak, bu düşünce çizgisiyle büyük bir sorunum var - kullanıcının sunucuyu terk ettiğini (php'de) nasıl tanıyacağını ve verileri nasıl sileceğimi nasıl anlarım? Kullanıcıların makinedeki sürücü alanını devralmasını istemiyorum. Bu tür bir web uygulaması için en iyi uygulamalar hakkında düşünceleriniz var mı?

cevap

1

# 1 numaralı sorun için gerçekten hiçbir seçeneğiniz yok. Zaten verileri Gzip'liyorsunuz ve nispeten hafif bir format olan JSON kullanıyorsunuz. 4 ~ 6 MB veri gerçekten çok fazla. BTW'nin verileri üretecek kadar uzun sürdüğünü düşünüyorsanız, C++ programınızı kullanarak veriyi üretebilir ve PHP kullanarak sunabilirsiniz. Bunu yapmak için exec()'u kullanabilirsiniz.

Ancak, senin simülasyonları nasıl çalıştığını emin değilim, ama muhtemelen (daha mantıklı neyse) istemci tarafında bu verilerin bazı/çoğu/tüm oluşturabilir böylece JavaScript, bir Turing-tam bir dildir. Bu durumda, birçok bant genişliğinden tasarruf edersiniz ve yükleme sürelerini önemli ölçüde azaltırsınız - ancak JS'nin gerçekten yavaş olabileceğini unutmayın.

# 2 numaralı sorun için, sunucuda veri bırakırsanız etkin oturumları izlemeniz gerekir (örn: kullanıcı sunucuyla en son ne zaman etkileşim kurduysa) ve mantıklı olan bir zaman aşımı ayarlayın. başvurunuz. Zaman aşımından sonra verileri silebilirsiniz.

Etkileşim kaydını tutmak için, bir kullanıcının etkin olup olmadığını (heartbeats veya benzeri bir şey göndererek) kontrol etmek için JS'yi kullanabilirsiniz.

İlgili konular