Как установить сокет-соединение с iPhone на сервер Apache и общаться через PHP? - PullRequest
2 голосов
/ 23 мая 2010

Я работаю над игрой для iPhone, которая зависит от сервера LAMP. Я хочу создать систему, основанную на «событиях», где сервер apache отправляет событие на iphone.

Для этого я подумываю использовать «CFStreamCreatePairWithSocketToHost» для подключения к порту 80 сервера apache.

Я могу успешно подключиться к серверу и открыть поток чтения и записи через iPhone, но я не уверен, как отправить данные на iphone с помощью PHP, запущенного с сервера LAMP на iPhone.

Я думаю, что могу использовать fsockopen в php, чтобы открыть соединение с сокетом и записать данные в этот сокет. Я устал запустить этот код

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

echo "запись в сокет
"; fwrite ($ fp, "wwqeqweqw eqwe qwe \ n");

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

Но я не вижу, чтобы что-то читалось на iphone ... Есть идеи, что происходит, или как это сделать?

Спасибо!

Ответы [ 3 ]

1 голос
/ 03 июня 2010

HTTP на самом деле не потоковый протокол, вы отправляете запросы и получаете от него ответы. Вы можете захотеть взглянуть на что-то другое, кроме apache / php, чтобы выполнить это требование

... или прислушайтесь к советам Пекки и разбейте ваши требования на простые ответы на запросы. т.е. опрашивать ваш сервер через регулярные промежутки времени, чтобы увидеть, есть ли какие-либо данные, ожидающие обработки iphone ... заметьте, я не защищаю это, поскольку это не очень приятно для сети или программиста, но это возможно.

Другой способ - создать свой собственный сервис (не использовать apache), который будет принимать соединения через определенный порт, к которому может подключаться ваш iphone, и обмениваться данными таким образом - вы даже можете запустить скрипт PHP таким способом, если вы этого хотите. (однако прочитайте ссылки, которые предоставил Пекка).

Еще один способ - встроить сервер в приложение iphone, к которому может подключиться ваш веб-сервер, однако это немного глупо, поскольку ваш сервер, вероятно, подключен к сети больше, чем ваш iphone (поскольку приложения iPhone не работают в фоновом режиме). если он не взломан, а iphone 4.0 еще не выпущен для широкой публики).

Варианты тем не менее:)

Мэтт

1 голос
/ 23 мая 2010

Ммм, использование PHP для прослушивания входящих соединений является неоптимальным, на самом деле это не то, для чего он был создан. Нет ли способа использовать «нормальные» каналы связи на основе HTTP, сделать простой запрос к URL и проанализировать возвращенные данные в любом формате, который вы предпочитаете?

В любом случае, проверьте

0 голосов
/ 23 июня 2010

Используйте модель "вытягивать" вместо модели "push" ...

Браузеры, как правило, создаются без сохранения состояния.Существуют способы обойти это ограничение, но не делать то, что вы описываете.

Потому что серверы никогда не ожидают передачи данных клиенту.Это будет означать, что сервер должен осознавать наличие, местоположение и среду для передачи данных клиенту, чего они обычно не делают.

Вместо попытки заставить сервер выдвинуть событиеклиенту на айфоне.Пусть сервер хранит состояние, а iPhone часто опрашивает состояние приложения с помощью AJAX.

Если вы хотите приложение с прямым соединением 1-1 между сервером и клиентом, LAMP / PHP - неправильный путьпотому что вам нужно, чтобы LAMP работал на сервере и iPhone, чтобы выполнить то, что вы описываете.То есть, вы не можете «протолкнуть» данные с HTTP-сервера на HTTP-клиент, вы можете только вернуть данные, запрошенные с сервера, клиенту.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...