Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Ajax & sockets
Форумы портала PHP.SU » » Работа с сетью » Ajax & sockets

Страниц (1): [1]
 

1. Slavenin - 04 Октября, 2012 - 12:00:03 - перейти к сообщению
Всем доброго времени суток!
Написал на php сокет-сервер. Все здорово, все работает... При прямом обращении по нужным адресам.

Дальше начинается "уличная магия"... В том случае, если сервер уже запущен, когда я дергаю его ajax`ом все хорошо. Если же сервер не запущен, то я его запускаю и пробую снова чего-нибудь ему отправить. Он запускается(вижу в логах), но... и это самое странное, даже после принудительного завершения ajax-запроса(на запуск) второй(с сообщением до сервера не доходит)... тупо висит в сетевой активности, такое ощущение, что он встает в некую очередь и ждет завершения скрипта сервера, так как если сервак тормознуть, то запрос выполняется.

Помогите пожалуйста, второй день не могу понять, что происходит...

Сервер
Спойлер (Отобразить)


клиент

Спойлер (Отобразить)


js

Спойлер (Отобразить)
2. Slavenin - 04 Октября, 2012 - 14:46:41 - перейти к сообщению
победа но из разряда "где мой бубен"... Проблема решается путем запуска сервера в отдельном потоке через stream_socket_client с отключенной блокировкой stream_set_blocking( $s, 0 ); в результате сервер запускается в отдельном потоке, скрипт не ждет ответа и удачно завершается, можно слать запросы...

вот бы еще кто-то просветил какого ... нужно серверу без этого шаманства
3. keltstr - 05 Января, 2013 - 00:52:21 - перейти к сообщению
сервер на win ? режим PHP ?
4. DeepVarvar - 05 Января, 2013 - 01:13:28 - перейти к сообщению
Slavenin пишет:
и пробую снова чего-нибудь ему отправить. Он запускается(вижу в логах)
Вот тут подробнее пожалуйста о последовательности действий, я не понял.
Но по сути, да, если вы проведете эксперимент и будете коннектиться до порта, на котором висит сокет, четез браузер напрямую, быстро обновляя F5, то увидите, что счетчик обращений показывает не корректные результаты. Дело в том что браузер по причине "оптимизации" (тваюмать) его работы не ждет синхронизированного ответа на конкретно отправленный запрос, а принимает тот, который пришел от сервера сейчас, и ему не важно, что от сервера летят еще пять ответов.
Лечение отсутствует. Ставьте памятник великим кодерам хрома, мазилы, оперы и с некоторых пор осла... вуаля.

Хотя более низкий уровень, TCP, как бы обязывает синхронизацию пакетов Закатив глазки

 

Powered by ExBB FM 1.0 RC1