Php den NuSOAP yakarken, sonuç için beklemek yok

4 Cevap php

Ben şu anda bir müşteri işaretleri kadar sonra bir ses yayını tetikleyecek bir adım olan bir komut dosyası var. Bu callfire bir NuSOAP çağrısı.

Gecikme var oldukça yüksek olduğunu ve benim alt-ikinci kaydolmak süreci için yaklaşık 2 saniye eklenir. Sonuç olarak, insanların düğmesine bir kez daha işaret isabet var.

Sonuçlar için bekleyin ve sadece hareket DEĞİL app anlamanın bir yolu var mı?

Bu dosya için bir yuva açın, ayrı bir dosyada NuSOAP tüm kod koyarak hile mümkündür, ama ben temiz bir yol arıyorum.

Ya da bir işlevi kapalı ateş değil sonuçları beklemek için bir yol var mı? Ben olduğunu sanmıyorum.

4 Cevap

Bir cli komut dosyası kodunu taşıyabilirsiniz. Web sunucusu PHP parçacığı cli komut dosyasını çalıştırın. CLI süreç daha sonra çatal ve ebeveyn çıkar. Web iplik devam edebilir ve CLI alt süreç kullanıcı kayıt olabilirsiniz.

SOAP çağrı wih arızası durumunda, ben bir yere verileri depolamak ve bunu kaldırmak veya bir kez bitmiş gibi başarılı olduğunu işaretlemek öneririz. Bir cron iş rutin bir arama başarısız olmadığını görmek için kontrol edin ve birisi (yönetici, kullanıcı) haber sonra onları yeniden olabilir.

Sadece "hemen" "yakında" olmak yerine zorundadır bazı eylem varsa, o çeşit (örneğin veritabanı tablosu) bir kuyruğa eklemek.

Sonraki her dakika ya da öylesine boyunca bir cron işi gelip bu kuyrukta olan görevleri yerine gelmiştir.

Bildiğim kadarıyla doğrudan bir fonksiyonu kapalı yangın ve yürütme zincirinde geçmiş taşımak için bir yol yoktur ... ama bazı serin / basit çözümler vardır:

  • Eğer ayrı bir dosyada kod koyarak ve bu şekilde o uzakta ateş ... Ben sadece bunu çalıştırmak için bir shell_exec komutunu kullanın ve bunu nohup ediyorum rağmen, belirtildiği gibi, bu yüzden arka planda koştu
  • Paul belirtildiği gibi bir kuyruk oluşturma
  • Gearman gibi bir şey içine bak (http://www.danga.com/gearman/) ... Digg onunla çalışmak için bazı güzel ARMUT kütüphanelerini yazdı. Gearman muhtemelen biraz overkill, ama bu söz değil çok cool :)

Sen tarayıcıdan bazı Ajax isteği yaparken düşünmek olabilir:

  • kullanıcı ayetler
  • o (örneğin onun hesabı sayfası) bir sayfaya yönlendirilir
  • bu sayfada, SOAP arama yapar, sunucu üzerindeki bir PHP komut dosyası için bir Ajax çağrısı vardır

Yani sık sık, sanırım duyarsınız bir fikir ... Ama o Javascript etkin HAVA için kullanıcı gerektirir ve her zaman güzel işe yaramayabilir (ne varsa Ajax isteği bitmeden kullanıcı sayfa bırakır?)

IMHO, the best (more secure, will always work, doesn't depend on the client, ...) way would really be with some request queue, like Paul suggested.
That's the solution I'd choose.

Ama, tabii ki kullanıcının ayında imzalanması ve isteği gönderilir zaman arasında bir gecikme ekler ... ama kötü olduğunu?