2008-09-17 17 views
0

Tomcat üzerinde çalışan sunucu tarafında bir uygulamada, Internet'ten indirilen rastgele kullanıcı tarafından talep edilen sitelere dayalı olarak tam HTML sayfaları (başlıklı) üretiyorum. İstemci tarafı uygulaması, belirli bir web sayfasının işlenmesini talep etmek için eşzamansız geri aramalar kullanır. İşleme biraz zaman alabileceğinden, kullanıcıya, anket aracılığıyla, bu sayede geri aramalar hakkında bilgi vermek istiyorum.Tam HTML içeriğini istemcilere geri gönderirken, sunucu tarafında geçici dosya oluşturma nasıl önlenir?

Sunucu tarafında, web sayfası alındıktan sonra işlenir ve "geliştirilmiş" bir sürüm oluşturulur. Sonra bu sürüm kullanıcıya geri dönmek zorunda. Sayfayı istemci tarafındaki uygulamanın sayfasının bir parçası olarak görüntülemek bir seçenek değildir.

Şu anda sunucu geçici bir dosya oluşturur ve ona bir bağlantı gönderir. Bu açıkça suboptimal.

Bir sonraki en iyi çözüm, HTML içeriğini md5-sum'ları veya sha1-ids ile birlikte saklayan ve ardından hash-ID ile bir sunucu uygulamasına geri gönderen bir önbelleğe alma-DB'sini oluşturarak, inoller oluşturabilirim. tartışma. Servlet daha sonra siteyi önbellek-DB'den ister.

Daha iyi bir çözüm var mı? Değilse, hangi DB-arka ucunu teklif edersiniz? Ben SQLite düşünüyorum. Çözülecek problemin bir kısmı: Bir sayfa <html>'u </html> numaralı müşteriye nasıl geri gönderirim?

cevap

1

Gerçek sebat gerekli değilse SQL yerine memcached gibi daha geçici bir şey kullanma hakkında nasıl? Semantik çağrıları oldukça temiz ve kolaydır - ve elbette verileri manuel olarak, ttl veya @ restart yöntemiyle sona erdirebilirsiniz.

1

Geçici bir dosya oluşturmak, doldurmak ve sonra bir bağlantı göndermek yerine, bir bellek arabelleği oluşturabilir, doldurabilir ve yanıt olarak gönderebilir (mime-type 'metinle birlikte gönderebilirsiniz)/html "). Sayfa tamponlarını hemen göndermek istemiyorsanız, bunları daha sonra kullanıcının oturumuna kaydedebilirsiniz. Bu şekilde çok fazla bellek almaktan endişe ediyorsanız, bellekte yalnızca belirli sayıda sayfa arabelleğini saklamak ve geri kalanını daha sonra almak için diske yazmak isteyebilirsiniz. DB kullanmak overkill gibi bir ses çıkarır (her şeyden önce ilişkisel bir bilgi yoktur) - ancak önbellekleme problemini güzelce çözer.

İlgili konular