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
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Работа с socket или WebSockets
Покинул форум
Сообщений всего: 356
Дата рег-ции: Июнь 2013 Откуда: Ставропольский край
Помог: 10 раз(а)
[+]
Всем привет.
Суть проблемы: я забыл php
Есть некий сервис, который предоставляет кнопку для сбора пожертвований. Для мониторинга имеются нотификаторы: оповещение о пожертвовании и виджет сбора средств, показывающий сколько уже собрано и сколько нужно собрать.
Помимо этого сервиса есть еще один аналогичный. Так вот мне нужно получать данные от этих сервисов и формировать из них свои нотификаторы. У одного сервиса есть хороший API, а вот другой сервис, толи еще не успел документировать API, толи не хотят, но вот что мне ответили:
Цитата:
подключитесь по адресу: socket.site.ru:3001 с передачей двух параметров:
token - Ваш токен;
type - со значением "alert_widget" или "minor".
Вы будете получать информацию о пожертвованиях в формате JSON в реальном времени.
Так вот, помогите, как это сделать. Я пробовал подключиться через socket_connect - подключаюсь, но параметры им как передать?
А вообще они это организовали наверно через WebSockets, так как их виджеты - это web страрички, в которых имеются обезображенные JavaScript обернутые в eval.
Но мне собственно особо без разницы, как получать данные - через javascript или php.
----- ПЫХ тут - ходи туда, прежде чем писать сюда (толку больше будет)
Hapson
Отправлено: 02 Июня, 2016 - 10:22:27
Посетитель
Покинул форум
Сообщений всего: 356
Дата рег-ции: Июнь 2013 Откуда: Ставропольский край
Помог: 10 раз(а)
[+]
Никто не знает?
----- ПЫХ тут - ходи туда, прежде чем писать сюда (толку больше будет)
OrmaJever
Отправлено: 02 Июня, 2016 - 12:04:17
Активный участник
Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010 Откуда: Чернигов
Помог: 299 раз(а)
а что тут знать? если это и правда вебсокеты то с ними не сложно https://learn[dot]javascript[dot]ru/websockets
а всё остальное должно быть в описании к этому апи, каким способом параметры передавать, что будет приходить и т.д.
----- Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
Hapson
Отправлено: 02 Июня, 2016 - 13:44:47
Посетитель
Покинул форум
Сообщений всего: 356
Дата рег-ции: Июнь 2013 Откуда: Ставропольский край
Помог: 10 раз(а)
[+]
OrmaJever
Да сервис использует WebSocket, более того - библиотеку socket.io.
Осталось только разобраться в их скриптах, в божеский вид я их привел, нужно отследить, как передаются параметры. (Добавление)
Еще вопрос, если делать это на php, то какой функцией вообще передаются параметры - socket_write?
И каков порядок подключения и дальнейшего прослушивания сокета? Везде по-разному описывают. Что-то там нужно биндить, какие-то опции ставить...
----- ПЫХ тут - ходи туда, прежде чем писать сюда (толку больше будет)
OrmaJever
Отправлено: 02 Июня, 2016 - 15:42:39
Активный участник
Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010 Откуда: Чернигов
Помог: 299 раз(а)
Hapson пишет:
И каков порядок подключения и дальнейшего прослушивания сокета?
я же дал ссылку, там всё наглядно написано, код не сложный.
Hapson пишет:
Еще вопрос, если делать это на php, то какой функцией вообще передаются параметры - socket_write?
технология вебсокетов по большей части придумана для браузера, поэтому клиент в большинстве случаев - браузер где и есть всё нужное для подключения, а вот в php я не встречал библиотек для работы с вебсокетами, они скорее всего есть, надо погуглить.
----- Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
Hapson
Отправлено: 02 Июня, 2016 - 17:54:48
Посетитель
Покинул форум
Сообщений всего: 356
Дата рег-ции: Июнь 2013 Откуда: Ставропольский край
Помог: 10 раз(а)
[+]
OrmaJever
Эм... ты не понял. Меня интересует работа в php с этими функциями http://php.net/manual/ru/ref.sockets.php
Правильная работа. То есть, подключиться к сокету и ожидать от него постоянно данные, по окончании сеанса работы правильно разорвать соединение. Сеанс может длиться 2-3 часа.
----- ПЫХ тут - ходи туда, прежде чем писать сюда (толку больше будет)
OrmaJever
Отправлено: 02 Июня, 2016 - 18:05:13
Активный участник
Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010 Откуда: Чернигов
Помог: 299 раз(а)
Hapson socket_* это низкоуровневые сокеты, работать с ними не сложно но тут они не помогут. Технология websocket во-первых "шифрует" каждый пакет во-вторых требует не просто соединения а некий handleshake, я сомневаюсь что вы хотите с этим разбираться, поэтому лучше погуглить библиотеки для работы с вебсокетами.
----- Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
Hapson
Отправлено: 02 Июня, 2016 - 18:31:58
Посетитель
Покинул форум
Сообщений всего: 356
Дата рег-ции: Июнь 2013 Откуда: Ставропольский край
Помог: 10 раз(а)
[+]
OrmaJever
Для реализации через javascript есть библиотека socket.io - они используют ее, можно просто модифицировать их код под свои нужды.
Но хотелось бы делать это на php, так как есть еще API другого сервиса, код для которого я буду писать на php. И, хотелось бы объединить это все как можно проще.
Меня интересует, как послать на их сервер данные после коннекта. И как потом ожидать данные от них
----- ПЫХ тут - ходи туда, прежде чем писать сюда (толку больше будет)
esterio
Отправлено: 02 Июня, 2016 - 20:02:53
Активный участник
Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012 Откуда: Украина, Львов
Помог: 127 раз(а)
OrmaJever ж написал что для WebSocket-ов нужно рукопожатия. На уровне sockets.io они использують возможность в браузере уже готовую. В PHP такого нету. Вам либо нужно писать свое с нуля, что очень нелегко или использовать готовую библиотеку что предпочтительней.
Hapson
Отправлено: 03 Июня, 2016 - 14:50:14
Посетитель
Покинул форум
Сообщений всего: 356
Дата рег-ции: Июнь 2013 Откуда: Ставропольский край
Помог: 10 раз(а)
[+]
OK, я кажется начинаю понимать
Получилось сделать на js с использованием socket.io. Только вот непонятно, есть ли там возможность слушать все события от сервера, или обязательно свой обработчик на каждое событие.
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.