2010-05-23 55 views
2

我正在研究一款依賴LAMP服務器的iPhone遊戲。我想創建一個基於「事件」的系統,其中apache服務器向iphone發送一個事件。如何建立從iPhone到Apache服務器的套接字連接並通過PHP進行通信?

對於這一點,我想用「CFStreamCreatePairWithSocketToHost」連接到Apache服務器的80端口。

我能夠成功連接到服務器,並打開讀取,並通過iPhone寫流,但我不知道如何將數據發送到使用PHP從LAMP服務器到iPhone上運行的iPhone。

我認爲我可以使用的fsockopen在PHP中打開一個套接字連接,將數據寫入到該插座。我累了跑這個代碼

$fp = fsockopen("tcp://localhost", 80, $errno, $errstr); 
    if (!$fp) { 
     echo "ERROR: $errno - $errstr<br />\n"; 
    } else { 

回聲「寫入插座
」; fwrite($ fp,「wwqeqweqw eqwe qwe \ n」);

//echo fread($fp, 26); 
fclose($fp); 
echo "done"; 
    } 

但是,我沒有看到任何東西在iphone上讀取..任何想法是怎麼回事,或如何做到這一點?

謝謝!

回答

1

嗯,用PHP來偵聽傳入的連接是次優的,它不是真正的這是什麼的建造。是否沒有辦法使用「正常的」基於HTTP的通信通道,向URL提出明確請求並以任何您喜歡的格式解析返回的數據?

無論如何,檢查出

+0

問題是,我們無法在iPhone上託管一臺可以在廣域網上工作的服務器(這是我通過閱讀互聯網上的東西發現的)。 我知道一些應用程序,一些如何能夠調用iPhone執行一個事件。不知道他們是怎麼做到的...... – user348398 2010-05-23 18:15:10

+0

@candoyo我假設他們正在使用某種持久連接。不知道這是否對您有幫助 - 我沒有參與iPhone開發 - 但使用「長輪詢」技術可以在HTTP客戶端中實現類似的效果:http://en.wikipedia.org/wiki/Comet_%28programming%29 – 2010-05-23 18:17:56

1

HTTP是不是一個真正的流媒體協議,你從它發送請求並得到響應。你可能想看看比Apache/PHP以外的東西來滿足這一要求

...或謹慎佩卡的意見和打破你的要求下來到簡單的請求響應。即輪詢您定期服務器,看看是否有等待iphone處理...注意我不主張以此作爲其不是網絡或編程上非常愉快的,但它是一個possability任何數據。

另一種方法是構建你自己的服務(不要使用apache),它將接受你的iphone可以連接到的特定端口上的連接,並以這種方式進行通信 - 如果你這樣的話,你甚至可以用這種方式運行PHP腳本慾望(然而閱讀Pekka提供的鏈接)。

另一種方法是建立服務器到你的iPhone應用程序,你的服務器可以連接到 - 然而,這是一個有點傻作爲您的服務器可能是在線人數超過你的iPhone是(作爲iPhone的應用程序不會在運行背景如果是未破解的,iphone 4.0還沒有向公衆發佈)。

選項無 - 少:)

馬特

0

使用,而不是「推」模式「拉」 ......

瀏覽器通常設計爲無狀態。圍繞這種限制有辦法,但不是做你所描述的。

因爲,服務器是從來沒有預計'推送'數據到客戶端。這意味着服務器必須意識到存在,位置和媒介才能將數據傳輸到客戶端,而這通常不是。

而不是試圖讓服務器將事件推送到iPhone上的客戶端。讓服務器存儲狀態並使iPhone經常使用AJAX輪詢應用程序狀態。

如果你想在服務器和客戶端之間建立一個直接的1-1連接的應用程序LAMP/PHP是錯誤的方法,因爲你需要在服務器和iPhone上運行LAMP來完成你的「重新描述。 IE瀏覽器不能將數據從HTTP服務器「推送」到HTTP客戶端,只能將從服務器請求的數據返回給客戶端。

相關問題