Есть простенькие клиент и сервер на websockets. Клиент простейший, вводишь в инпут текст, по кнопке делается socket.send(text). На сервере бегает бесконечный цикл: Код (PHP): while(true) { // Тут мы получаем в $socket идентификатор сокета $bytes = socket_recv($socket,$buffer,2048,0); echo $buffer."\nBytes: "; var_dump($bytes); if ($bytes > 0) { // Обработка пришедшего текста, если не было handshake - сделать handshake, если был - обработать как данные } else { disconnect($socket); } } Handshake делается, все хорошо. Потом socket.send('123') со стороны клиента - в очередной итерации цикла на сервер приходит "123" и корректно обрабатывается, а в следующей итерации приходит пустая строка. Делал костыль - дисконнект только после пяти пустых строк подряд - приходят пять пустых строк в следующих пяти итерациях цикла. Клиент во всех случаях получает отлуп "Во время загрузки страницы соединение с ws://localhost:8008/ws_server.php было прервано", даже если на сервере поставить полный игнор пустых строк (if ($bytes>0) {...} else continue). Слышал, что нужно завершать передачу пустой строкой (http://forum.ixbt.com/topic.cgi?id=26:41693), передавал и "123\n\n", и "123\r\n\r\n", все равно на следующих итерациях цикла продолжает отрабатывать socket_recv и возвращать пустые строки. Проверял $bytes через var_dump - это именно int(0), а не false.
можно дурацкий вопрос? а где у тебя выход из цикла? самое главное всегда оказывается в тех фрагментах, которые поциент сразу не показывает )))
Выхода из цикла, что характерно, нет, он там и не нужен. Процесс запущен в консоли и крутится там, ждет подключений клиентов.
Да это оно и есть, в общем-то. Код почти целиком взят с https://code.google.com/p/phpwebsocket/, заменены функции dohandshake и getheaders на другие, взятые с какого-то форума, потому что со старыми даже сервер не запускался.
Доводилось в целях самообучения (читай самомучения) писать сервер на веб-сокетах на пыхе. Развлечение было увлекательным. Сразу могу сказать, что работает из того что публикуется всякими самоделками может быть каждое 5 решение. Отмёл все велосипеды и начал прямо с изучения протокола. Процесс занял неделю, включая отладку. Подводных камней там набралось на мешок, после которого ещё откроете, что половина браузеров технологию не поддерживает и будете писать обходные решения (второй мешок). Поднимайте node.js +socket.io и получайте удовольствие. Решит все проблемы.
Спасибо за совет, но сейчас мне нужно именно на РНР. Тем более большинство браузеров уже все давно поддерживает.
А ты прекрасен в своей наивности Вопрос в том: КАК поддерживает. Совет уже дали - забей и делай на ноде.