Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
Страницы: (4) 1 [2] 3 4  ( Перейти к первому непрочитанному сообщению )  
Фильтр авторов:    показать 
  скрыть
  Ответ в темуСоздание новой темыСоздание опроса

> Сокеты
N0ob  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 790
Пользователь №: 37078
На форуме: 3 года, 8 месяцев
Карма: 13




Цитата
if (strtoupper(substr(PHP_OS,0,3)) === 'WIN') {  //Действия под виндой
exec("w:\usr\local\php5\php.exe -q w:\home\localhost\www\ws\ws.php");
} else exec("php -q ws.php &");


Какой командой нужно удалять процесс, созданный выше. Т.к. не красиво получается, когда закончил работать а сервак еще работает. Нужно ж как то его тормозить
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
T1grOK  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 2703
Пользователь №: 24406
На форуме: 6 лет, 1 месяц, 17 дней
Карма: 170




Стопнешь процесс, а порт как тогда слушать?


--------------------
Mysql, Postgresql, Redis, Memcached, Unit Testing, CI, Kohana, Yii, Phalcon, Zend Framework, Joomla, Open Cart, Ymaps, VK Api
PMПисьмо на e-mail пользователюСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
N0ob  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 790
Пользователь №: 37078
На форуме: 3 года, 8 месяцев
Карма: 13




T1grOK в том то и дело, я хочу прекратить прослушку порта. Удалить этот сокет. ПОЛНОСТЬЮ
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
T1grOK  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 2703
Пользователь №: 24406
На форуме: 6 лет, 1 месяц, 17 дней
Карма: 170




Ну под виндой через процессы грохнуть, под линем черем ps aux узнать номер демона и kill!


--------------------
Mysql, Postgresql, Redis, Memcached, Unit Testing, CI, Kohana, Yii, Phalcon, Zend Framework, Joomla, Open Cart, Ymaps, VK Api
PMПисьмо на e-mail пользователюСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
N0ob  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 790
Пользователь №: 37078
На форуме: 3 года, 8 месяцев
Карма: 13




Спустя столетия пришел к такому выводу. Сам сервер можно написать и на php, и организовать его обычным способом, как я описал в первом посте. Клиент же можно сделать как и на обычном JS, используя готовый API, либо через AJAX запросы но уже реализация клиента идет через PHP. По мне как, гораздо удобнее все это делать на готовом API от JS нежели через AJAX делая совершенно не нежные запросы на сервер создавая своеобразную и нехилую нагрузку. Правильно ли я мыслю?

Так же вопрос немного из реализации.

var socket = new WebSocket("ws://javascript.ru/ws");


пример кода с офф. сайта. не совсем понятен параметр, передаваемый в функцию. ws - это понятно, говорит что это совет. Далее я почему то не вижу тут номера порта. javascript.ru/ws вообще ересть какая то. Мне не понятна реализация всей этой лабуды. Зачем здесь добавили /ws в конце УРЛа?
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
killer8080  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 8735
Пользователь №: 26630
На форуме: 5 лет, 9 месяцев, 1 день
Карма: 591




Цитата (N0ob @ 25.04.2016 - 18:14)
Клиент же можно сделать как и на обычном JS, используя готовый API, либо через AJAX запросы но уже реализация клиента идет через PHP.

ты сам то понял что написал? Что за клиент на PHP? И причем тут аякс вообще, если речь идёт о вебсокетах?

Цитата (N0ob @ 25.04.2016 - 18:14)
Далее я почему то не вижу тут номера порта.

потому что соединение идёт на 80-й порт.
Цитата (N0ob @ 25.04.2016 - 18:14)
javascript.ru/ws вообще ересть какая то. Мне не понятна реализация всей этой лабуды. Зачем здесь добавили /ws в конце УРЛа?

захотели и добавили, это всего лишь навсего УРЛ. Возможно в том примере конект идёт не напрямую, а через реверс-прокси, а УРЛ прописан в правилах проксирования, чтоб отличать от обычных http запросов.
80-й порт может использоваться для обхода фаерволов, запрещающих соединение на другие порты например.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
N0ob  
 ۩  [x] Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 790
Пользователь №: 37078
На форуме: 3 года, 8 месяцев
Карма: 13




Цитата
ты сам то понял что написал? Что за клиент на PHP? И причем тут аякс вообще, если речь идёт о вебсокетах?

Я всего лишь банальный нуб в этой области. Я всего лишь сказал, что понял. Получается, понял не правильно. Например, вот код клиента с офф. сайта PHP:
<?php
error_reporting(E_ALL);

echo "<h2>Соединение TCP/IP</h2>\n";

/* Получаем порт сервиса WWW. */
$service_port = getservbyname('www', 'tcp');

/* Получаем IP адрес целевого хоста. */
$address = gethostbyname('www.example.com');

/* Создаём TCP/IP сокет. */
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false) {
echo "Не удалось выполнить socket_create(): причина: " . socket_strerror(socket_last_error()) . "\n";
} else {
echo "OK.\n";
}

echo "Пытаемся соединиться с '$address' на порту '$service_port'...";
$result = socket_connect($socket, $address, $service_port);
if ($result === false) {
echo "Не удалось выполнить socket_connect().\nПричина: ($result) " . socket_strerror(socket_last_error($socket)) . "\n";
} else {
echo "OK.\n";
}

$in = "HEAD / HTTP/1.1\r\n";
$in .= "Host: www.example.com\r\n";
$in .= "Connection: Close\r\n\r\n";
$out = '';

echo "Отправляем HTTP HEAD запрос...";
socket_write($socket, $in, strlen($in));
echo "OK.\n";

echo "Читаем ответ:\n\n";
while ($out = socket_read($socket, 2048)) {
echo $out;
}

echo "Закрываем сокет...";
socket_close($socket);
echo "OK.\n\n";
?>


Ведь сокеты должны приниматься как то динамически. Ведь так? Тут просто идет создание сокета и чтение сервера. Если можно, поясните мне как работает конкретно ЭТОТ клиент.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
killer8080  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 8735
Пользователь №: 26630
На форуме: 5 лет, 9 месяцев, 1 день
Карма: 591




Цитата (N0ob @ 27.04.2016 - 19:23)
Если можно, поясните мне как работает конкретно ЭТОТ клиент.

Этот пример к вебсокетам не имеет ни какого отношения, это обычный http запрос. Вебсокеты это расширение протокола http который, использует его в качестве транспорта. Стандарт описан в RFC6455 тут на русском описаны общие принципы протокола.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
N0ob  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 790
Пользователь №: 37078
На форуме: 3 года, 8 месяцев
Карма: 13




killer8080 то есть это всего лишь пример? Тогда зачем php придумали реализацию клиента на их языке? dry.gif

Получается сервер можно сделать и на обычном php. Клиента делают на JS. Если я все правильно понял, то вопросик есть. Допусти на сервере я сохранил входные данные от некого юзера, которые нужно передать другому. Вопрос: как идентифицировать этого юзера и проверить на наличие соединения с сервером? То есть тот же самый чат. Сидят в чате 2 юзера и переписываются. Один пишет сообщение, оно отправляется на сервер, а оттуда уже, кому оно было адресовано. Так вот мне нужно как то узнать этого пользователя. Сказать серверу, что пакет нужно отправлять именно этому юзеру, если он соединен с сервером.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
killer8080  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 8735
Пользователь №: 26630
На форуме: 5 лет, 9 месяцев, 1 день
Карма: 591




Цитата (N0ob @ 28.04.2016 - 17:11)
killer8080 то есть это всего лишь пример? Тогда зачем php придумали реализацию клиента на их языке?

вот простой пример вебсокетов на php
https://habrahabr.ru/post/209864/
Цитата (N0ob @ 28.04.2016 - 17:11)
Получается сервер можно сделать и на обычном php. Клиента делают на JS. Если я все правильно понял, то вопросик есть. Допусти на сервере я сохранил входные данные от некого юзера, которые нужно передать другому. Вопрос: как идентифицировать этого юзера и проверить на наличие соединения с сервером? То есть тот же самый чат. Сидят в чате 2 юзера и переписываются. Один пишет сообщение, оно отправляется на сервер, а оттуда уже, кому оно было адресовано. Так вот мне нужно как то узнать этого пользователя. Сказать серверу, что пакет нужно отправлять именно этому юзеру, если он соединен с сервером.

а вот эту логику ты и должен реализовать, либо передачей логина пароля при инициализации соединения, либо через сессионный id, если юзер авторизован. На серверной стороне должен быть массив вида [userId => connectionId] по которому будешь определять, кому послать сообщение, если оно приватное, или просто делаешь массовую рассылку по всем конектом, если это общий чат.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
N0ob  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 790
Пользователь №: 37078
На форуме: 3 года, 8 месяцев
Карма: 13




killer8080 какая функция отправляет пакет конкретному пользователю?
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Santehnick  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Абориген
*****

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 231
Пользователь №: 26735
На форуме: 5 лет, 8 месяцев, 26 дней
Карма: 15




Цитата (N0ob @ 1.05.2016 - 04:56)
killer8080 какая функция отправляет пакет конкретному пользователю?

Например эта http://php.net/manual/ru/function.socket-send.php

Тебе нужно все сокеты сохранять в массив, ты можешь сделать мэппинг user_id => socket. Затем, когда хочешь что-то отправить конкретному пользователю находишь по user_id его открытый сокет и передаешь этот сокет в функцию http://php.net/manual/ru/function.socket-send.php вместе с данными, которые хочешь послать в этот сокет.

Дружище, не мучайся, возьми Ratchet там уже вся низкоуровневая хрень реализована http://socketo.me/docs/hello-world#logic тебе лишь нужно реализовать обработчики onOpen, onMessage и т.д. Там же смотри как в обработчике onOpen сокет сохраняется в $this->clients. А в onMessage как в обычном цикле этот массив перебирается и рассылает по всем сокетам сообщение.

Ты можешь не сохранять соединение сразу в $this->clients, а подождать пока клиент отправит в сокет json сообщение типа "{method: "login", "params": {login: user, password: pass}}". Внутри onMessage разбирать сообщение от юзера и запускать метод login, где у тебя будет логика аутентификации и уже после этого сохранять сокет в $this->clients вместе с id пользователя. По нему же будешь находить соединение того пользователя, которому тебе нужно отправить сообщение.

Без глубоких знаний, без опыта, ты замучаешься писать всё с нуля, встретишь тысячи граблей, потеряешь кучу времени. А так, ты возьмешь готовое и начнешь использовать, со временем начнешь лучше понимать как это работает, начнешь заглядывать внутрь этой библиотеки и в конце концов со временем поймешь как она работает.

Поверь, все так делают и Java и Python и Node девелоперы. Везде есть подобные низкоуровневые решения. Ты же не пишешь очередной nginx, только для того, чтобы начать запускать через него свои php скрипты? Ну вот. Поверь, тебе и без этой херни нужно будет в куче проблем разобраться.
PM
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
N0ob  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 790
Пользователь №: 37078
На форуме: 3 года, 8 месяцев
Карма: 13




Santehnick спасибо за совет. Что ж, думаю опробую эту штуку. Может что и выйдет )
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
N0ob  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 790
Пользователь №: 37078
На форуме: 3 года, 8 месяцев
Карма: 13




Не могу стартонуть сервер. Постоянно вылазить вот такая вот шляпа:
Цитата
Warning: socket_bind(): unable to bind address [10049]:

Использую адрес 127.0.0.1 и порт 889. Так же пробовал другой айпишник и открыл порт в роутере. Такая же проблема. Как решить?
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Guest  
Дата
Цитировать сообщение


Гость пожелал остаться неизвестным

Unregistered









Ставь порт больше 1024.
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
  Быстрый ответ
Информация о Госте
Введите Ваше имя
Кнопки кодов
Для вставки цитаты, выделите нужный текст и
НАЖМИТЕ СЮДА
Введите сообщение
Смайлики
:huh:  :o  ;) 
:P  :D  :lol: 
B)  :rolleyes:  <_< 
:)  :angry:  :( 
:unsure:  :blink:  :ph34r: 
     
Показать всё

Опции сообщения  Включить смайлики?
 Включить подпись?
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темыСтраницы: (4) 1 [2] 3 4  Ответ в темуСоздание новой темыСоздание опроса