Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Помогите с веб сокетом
|
|||
|---|---|---|---|
|
#18+
Сделал вот такой сервер: Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. Посылаю в него запрос методом POST с веб-страницы: Код: html 1. 2. 3. 4. 5. 6. В итоге получается что переменная $buffer иногда содержит заголовки и тело запроса, а иногда только заголовки без тела запроса. Закономерности я не нашел. Бывает три раза подряд срабатывает с телом, иногда по пять раз без тела приходит, промежутки времени между удачными запросами всегда разные если долбить не переставая, иногда до 8 секунд. В чем ошибка? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2014, 09:43 |
|
||
|
Помогите с веб сокетом
|
|||
|---|---|---|---|
|
#18+
При получение данных через сокет - данные буферизируются. Пока сокет не забуферизирует н-ое количество байт, он не отдаст их функции fread(). И наоборот, отправляющая сторона тоже может посылать данные кусочками. Как только сокет сочтет, что буфер заполнен - пакет данных в буфере становится доступным для вычитывания функцией fread(). Если в буфер сокета пришло МЕНЬШЕ данных, чем указано во втором параметре fread() то функция не станет ждать и вычитывать остальные нехватающие данные Поэтому при чтении из сокета принято вручную в цикле контролировать объем вычитанной информации и дочитывать, если пришло меньше, чем надо. Либо использовать специальные функции для работы с потоками типа http://www.php.net/manual/en/function.stream-get-meta-data.php ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2014, 10:42 |
|
||
|
Помогите с веб сокетом
|
|||
|---|---|---|---|
|
#18+
Проблема в том что stream_get_meta_data всегда возвращает unread_bytes = 0. Делал через fgets в цикле. Получалось что буфер считвался полностью, потом я вызвал fgets еще раз, программа зависла на несколько(много) секунд и потом считала остальные данные, наверное когда соединение закрылось. Но почему буфер обрывается именно после заголовков на \r\n\r\n ? И как дочитать все данные без ожидания в несколько секунд? Ведь отдающая сторона отправила весь объем, это же браузер с обычным POST запросом. ИМХО ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2014, 10:58 |
|
||
|
Помогите с веб сокетом
|
|||
|---|---|---|---|
|
#18+
Сделал размер считываемого блока поменьше, помогло немного, считывается теперь полностью до конца. Но как остановить чтение, как определить когда достигнут конец? Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2014, 12:14 |
|
||
|
Помогите с веб сокетом
|
|||
|---|---|---|---|
|
#18+
D_Pavel, зачем ты вообще это пишешь? -если нужен нормальный веб сервер - скачай готовый. вариантов в нете много. -если хочешь разобраться сам - начни с теории. без нее сервер получится дырявый, глючный и медленный. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2014, 12:20 |
|
||
|
|

start [/forum/topic.php?fid=23&tid=1462986]: |
0ms |
get settings: |
5ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
43ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
44ms |
get tp. blocked users: |
1ms |
| others: | 209ms |
| total: | 333ms |

| 0 / 0 |
