Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.05.2017, 12:49   #1
Андрей Цапко
Пользователь
 
Регистрация: 10.04.2017
Сообщений: 66
По умолчанию Web Socket

Не могу разобраться с вебсокетом. Прочитал кучу постов, но так ничего и не понял.
Клиентская часть:
Код HTML:
var host, webSocket;
host=location.host;
webSocket = new WebSocket('ws://'+host+':8000/websocket.php');

webSocket.onopen = function() {
    console.log("Соединение установлено.");
};

webSocket.onclose = function(event) {
    
    if (event.wasClean) {
        console.log('Соединение закрыто чисто');
    } else {
        console.log('Обрыв соединения');
    }
};

webSocket.onmessage = function(event) {
    console.log("Получены данные " + event.data);
};

webSocket.onerror = function(error) {
    console.log("Ошибка " + error.message);
};
Здесь в общем то все понятно, а вот с серверной частью я не разобрался.

понял только что в начале файла нужно написать
PHP код:
set_time_limit (0); 
что бы скрипт мог выполняться вечно.

Дальше по идеи надо создать сокет
PHP код:
$socket stream_socket_server("tcp://--Имя домена--:8000/-- путь к файлу веб сокета--"$errno$errstr); 
PHP код:
$connects = array();
while (
true) {
    
//формируем массив прослушиваемых сокетов:
    
$read $connects;
    
$read[] = $socket;
    
$write $except null;
    
    if (!
stream_select($read$write$exceptnull)) {//ожидаем сокеты доступные для чтения (без таймаута)
        
break;
    }

    if (
in_array($socket$read)) {//есть новое соединение
        
$connect stream_socket_accept($socket, -1);//принимаем новое соединение
        
$connects[] = $connect;//добавляем его в список необходимых для обработки
        
unset($readarray_search($socket$read) ]);
    }

    foreach(
$read as $connect) {//обрабатываем все соединения
        //как то обрабатываем
        
unset($connectsarray_search($connect$connects) ]);
    }

Браузер выдает ошибку в консоле. Подскажите пожалуйста что не так
Андрей Цапко вне форума Ответить с цитированием
Старый 25.05.2017, 13:23   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Андрей Цапко Посмотреть сообщение
Браузер выдает ошибку в консоле. Подскажите пожалуйста что не так
я тоже не специалист в данной области, но остановился на выборе для сервера PHPDaemon - дока, скачать
работает под Ubuntu/Linux и требует установленного >= PHP 5.5
может очень много всего (куча встроенных серверов, сервисов и клиентов).
Ещё под него нужно писать специальные приложения для обработки запросов.
Разобраться с ним не получилось. Но даже базовые вещи (из хелпа и интернета) успешно работают - см.статью 2010 года на Хабре

А ещё в Интернетах пишут, что если нужен WebServer, то нужно использовать на сервере полноценный Websocket server (например, Ratchet - PHP WebSockets) или node.js c клиентом и сервером WebSocket, ещё тут можно посмотреть, выбрать - список Comet Server

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

Последний раз редактировалось Serge_Bliznykov; 25.05.2017 в 13:31.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 25.05.2017, 13:36   #3
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Цитата:
Сообщение от Андрей Цапко Посмотреть сообщение
Подскажите пожалуйста что не так
вебсокет это отдельный протокол. Нельзя просто писать туда что попало по TCP. Вы ж на HTTP запросы не так отвечаете?
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 26.05.2017, 11:11   #4
Андрей Цапко
Пользователь
 
Регистрация: 10.04.2017
Сообщений: 66
По умолчанию

Тогда другой вопрос. Я создал тестовую БД и сделал запрос до создания сокета. Запись на добавляется, коннекта не происходит. Могу объяснить это только тем что запрос не доходит до файла. Нужна ли какая то настройка apacha или в другом проблема?
Андрей Цапко вне форума Ответить с цитированием
Старый 26.05.2017, 11:31   #5
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,158
По умолчанию

как малые дети, её богу.... какую бд создал, для чего, какой запрос сделал, куда - откуда? какого файла?
тот код что привели не будет у вас работать... websocket это не совсем сокет в том понимании что вы используете, это надстройка так сказать ... там есть реализация поддержки протокола...
вам дело говорят - про создание демонов и библиотек под них
ADSoft вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
<socket type='xml'/> ИЛИ <socket type='json'/> зашифровываются пакеты TCP ArtGrek Общие вопросы Web 2 10.02.2017 23:17
Приглашаем на работу Web-программистов/web- разработчиков ЗП от 100.000р torispb Паскаль, Turbo Pascal, PascalABC.NET 5 08.10.2014 00:45
Требуется web-программист, web-верстальщик и web-дизайнер OlgaBB Фриланс 0 12.08.2013 18:59