2013-07-05 70 views
11

我爲我寫的服務器應用程序開發了一個PHP5客戶端擴展,到目前爲止它工作得很好,但它不支持持久連接。 由於這是我想在發佈第一個穩定版本之前實現的東西,我正在尋找關於持久性的文檔,並且發現了持久分配例程(pemalloc,pecalloc等)。 是我無法理解的是如何檢索在新的請求持久性地分配對象,我的意思是,讓我們說,一個連接的永久ID是:C PHP擴展對象持久性

<hostname>:<port>:<timeout> 

如何保存(或檢查它是否是已經創建)連接對象(這是一個C結構,而不是一個Zval或任何嚴格的PHP相關)? 我怎樣才能檢索它以後給它的ID?我知道PHP持久化流(我研究過pfsockopen C源代碼),但是我使用C客戶端庫,所以我不能直接訪問套接字或者修改C客戶端庫來使用php流代替普通插座。

謝謝。

+0

持久連接被認爲至少存在問題的一個無狀態的Web服務器設計。你爲什麼要實現這個?我會嘗試創建一個連接池,如果可能的話,並嘗試重新初始化和重用現有的 – hek2mgl

+0

是的,這也是一個好主意,但我仍然需要堅持,所以問題仍然是一樣的:) –

+0

反正有趣的問題。 :)我擔心我無法幫助你,因爲它似乎你已經知道更多關於此的信息。但是我添加了一個fav,我很好奇答案的樣子。 – hek2mgl

回答

4

找到了解決辦法,它似乎有一個 「persistent_list」 散列對象,所以我能夠做到:

zend_hash_find(&EG(persistent_list), ... 

要找到持久性數據(與pemalloc allocd明顯),以及

zend_hash_update(&EG(persistent_list), ... 

保存新的實例。

(PostgreSQL的PHP​​擴展的源代碼中發現這一點。)

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

任何有興趣在我的方法,它在這裏https://github.com/evilsocket/phpgibson