2013-07-05 18 views
11

Yazdığım bir sunucu uygulaması için bir PHP5 istemci uzantısı geliştirdim ve şu ana kadar gayet iyi çalışıyor, ancak bu hala kalıcı bağlantıları desteklemiyor. Bu, ilk kararlı sürümü serbest bırakmadan önce uygulamak istediğim bir şey olduğundan, kalıcılık ile ilgili belgelere bakıyordum ve kalıcı tahsis rutinlerini (pemalloc, pecalloc, vb.) Buldum. anlayamıyorum Ne yeni istekler üzerine sürekli biçimde tahsis edilmiş nesneyi almak için nasıl, yani, en bir bağlantının kalıcı kimliği olduğunu varsayalım: i kurtarmak nasılC PHP Eklenti nesnesi persistance

<hostname>:<port>:<timeout> 

(ya da olup olmadığını kontrol zaten oluşturulmuş) bağlantı nesnesi (bir C yapısı değil, bir zval veya kesinlikle PHP ile ilgili bir şey)? Daha sonra kimliğine göre nasıl geri alabilirim?

PS: PHP kalıcı akışlarını biliyorum (pfsockopen C kaynakları üzerinde çalıştım), ancak bir C istemci kitaplığı kullanıyorum, böylece yuvaya doğrudan erişemiyorum veya bunun yerine php akışlarını kullanmak için C istemci kitaplığını değiştiremiyorum düz soketlerin.

Teşekkürler.

+0

Kalıcı bağlantıları vatansız web sunucusu tasarımı için en az sorunlu olarak kabul edilir burada . Bunu neden uygulamak istiyorsun? Mümkünse bir bağlantı havuzu oluşturmayı denerim ve mevcut olanları – hek2mgl

+0

yeniden başlatmayı ve yeniden kullanmayı denemelisiniz, bu da harika bir fikir, ama yine de persistaya ihtiyacım var, bu yüzden soru aynı kalır :) –

+0

İlginç sorun, yine de . :) Bu konuda size daha fazla yardımcı olamayacağından korkuyorum çünkü bu konuda benim hakkımda daha çok şey biliyorsunuz. Ama ben bir fav ekledim ve cevabın nasıl olacağını merak ediyorum. – hek2mgl

cevap

4

, bir "persistent_list" karma nesne var çözüm gibi görünüyor Bulundu, bu yüzden yapabiliyorum:

zend_hash_find(&EG(persistent_list), ... 

(besbelli pemalloc ile allocd) kalıcı verileri bulmak için, ve

zend_hash_update(&EG(persistent_list), ... 

Yeni örnekleri kaydetmek için. Benim yaklaşımı ile ilgilenen

(PostgreSQL php uzantısı kaynak kodunda buldum.)

http://devzone.zend.com/446/extension-writing-part-iii-resources/#Heading8

herkes, bu https://github.com/evilsocket/phpgibson