Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.89/18: Рейтинг темы: голосов - 18, средняя оценка - 4.89
19 / 1 / 3
Регистрация: 02.11.2016
Сообщений: 132
1

Как сделать чат между двумя пользователями без перезагрузки страницы?

12.12.2017, 17:23. Показов 3344. Ответов 27
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Я знаю что можно использовать websocket или ajax, но до конца не понимаю как это реализовать.
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
       //Мой клиент
 
    $socket = stream_socket_client('tcp://127.0.0.1:8888', $errno, $errstr, 2, STREAM_CLIENT_PERSISTENT);
    stream_set_timeout($socket, 3);
    fwrite($socket, "Hello server");
    while(!feof($socket)) {
        echo fgets($socket, 1024);
    }
    fclose($socket);
    
        //Мой сервер
 
    $socket_server = stream_socket_server("tcp://127.0.0.1:8888");
 
    while(true) {
        $socket = stream_socket_accept($socket_server, -1);
        $data = fread($socket, 1024);
        fwrite($socket, 'GG');
        fclose($socket);
    }
    fclose($socket_server);
Добавлено через 1 минуту
И даже в этом простом коде я не смог отправить не чего... Не к серверу, не к клиенту, то ошибка, то просто пустота

Добавлено через 5 минут
Если можно не бросать сразу ссылки на фреймворки, библиотеки, хотел бы сначала понять все как работает, а потом приступать к дальнейшему изучению
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.12.2017, 17:23
Ответы с готовыми решениями:

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

Как сделать мультизагрузку фото с ajax и php без перезагрузки страницы?
или хотя бы как можно как можно отправить данные массива name='image' в файл обработчик ? ...

Организация чат-общения между 2 пользователями
Вообщем возник вопрос, как организовать общение на сайте (подобие диалогов вконтакте), между 2...

Не получается сделать подгрузку без перезагрузки страницы. Ошибка: Fatal error: Call to undefined function
Всем привет. Ни как не получается разобраться. Всё пытаюсь сделать обновление блока без...

27
10 / 46 / 7
Регистрация: 28.11.2017
Сообщений: 97
12.12.2017, 19:26 2
Цитата Сообщение от _BoGdaN_ Посмотреть сообщение
Я знаю что можно использовать websocket или ajax
Не знаю, как там websocket, но я у себя на сайте использую ajax для отправки пост-запроса и получения результата, а также скрипт php, который всё это обрабатывает. ajax - это ява-скрипт. Лучше использовать библиотеку jQuery. Почитайте и поищите в инете уже готовые решения... их полно.
0
19 / 1 / 3
Регистрация: 02.11.2016
Сообщений: 132
12.12.2017, 21:33  [ТС] 3
BKmm, про ajax знаю, но кажется сейчас это уже прошлый век, но спасибо за совет.
0
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
12.12.2017, 21:48 4
_BoGdaN_, код сам писал?
0
19 / 1 / 3
Регистрация: 02.11.2016
Сообщений: 132
12.12.2017, 21:52  [ТС] 5
Jewbacabra, я смотрел на разных сайтах и на manualphp и в видео и на хабре, а этот код остался после моих экспериментов)
0
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
12.12.2017, 21:55 6
Цитата Сообщение от _BoGdaN_ Посмотреть сообщение
а этот код остался после моих экспериментов)
Что был за эксперимент, какой должен быть результат, и почему код именно такой?
0
19 / 1 / 3
Регистрация: 02.11.2016
Сообщений: 132
12.12.2017, 22:01  [ТС] 7
Там еще не много было коду, но с ним ошибка была, я за комментировал его и она пропала) И как я понимаю из за цикла просто сервер зависает и нечего не делает...

Добавлено через 21 секунду
Ну и конечно же они в разных файлах находятся

Добавлено через 34 секунды
Jewbacabra, я разные ф-и использовал с разными флагами

Добавлено через 29 секунд
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
//server
<?php
    /*$socket = socket_create(AF_INET, SOCK_STREAM,  getprotobyname('tcp'));
    if(!$socket)
        echo '0';
    else
        echo '1';
    socket_bind($socket, '127.0.0.1', 8888);
    socket_set_option($socket, SOL_SOCKET, SO_REUSEADDR, 1);
    socket_listen($socket);*/
    $socket_server = stream_socket_server("tcp://127.0.0.1:8888");
 
    if(!$socket_server) {
        echo '0';
        exit();
    }
 
    /*while(true) {
        $socket = stream_socket_accept($socket_server, -1);
        $data = fread($socket, 1024);
        fwrite($socket, 'GG');
        fclose($socket);
    }*/
    fclose($socket_server);
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//client
<?php
    /*$socket = socket_create(AF_INET, SOCK_STREAM,  getprotobyname('tcp'));
    if(!$socket)
        echo '0';
    socket_bind($socket, '127.0.0.1', 8888);
    socket_set_option($socket, SOL_SOCKET, SO_REUSEADDR, 1);
    socket_write($socket, "Hellow server");*/
    $socket = stream_socket_client('tcp://127.0.0.1:8888', $errno, $errstr, 2, STREAM_CLIENT_PERSISTENT);
    stream_set_timeout($socket, 3);
    fwrite($socket, "Hello server");
    while(!feof($socket)) {
        echo fgets($socket, 1024);
    }
    fclose($socket);
Добавлено через 1 минуту
Цитата Сообщение от Jewbacabra Посмотреть сообщение
какой должен быть результат
Для начала я хотел бы, что бы хоть, что то клиент мог оправить серверу и получить ответ.

Добавлено через 1 минуту
И с функцией socket_create не могу понять, где сервер, а где клиент.

Добавлено через 59 секунд
Или "типо" тот, что пишет клиент, а тот что слушает сервер или как тогда?
0
19 / 1 / 3
Регистрация: 02.11.2016
Сообщений: 132
12.12.2017, 22:05  [ТС] 8
С за комментированным кодом, сервер работает, да и клиент тоже(не точно) и выдает ошибку.
Миниатюры
Как сделать чат между двумя пользователями без перезагрузки страницы?  
0
19 / 1 / 3
Регистрация: 02.11.2016
Сообщений: 132
12.12.2017, 22:09  [ТС] 9
Цитата Сообщение от _BoGdaN_ Посмотреть сообщение
И с функцией socket_create не могу понять, где сервер, а где клиент.
Это кажется я понял)
Создаёт и возвращает ресурс сокета, также называемый как конечная точка обмена информацией.
То есть socket_create создает сервер...
0
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
12.12.2017, 22:10 10
_BoGdaN_, начнем с того, что эти скрипты надо запускать с консоли, а не браузером. И пока твои действия не станут осмысленными, результата не будет
0
19 / 1 / 3
Регистрация: 02.11.2016
Сообщений: 132
12.12.2017, 22:12  [ТС] 11
Jewbacabra, хорошо сейчас попробую, а сам код какой выбрать???
0
Тутошний я
2146 / 1201 / 225
Регистрация: 03.11.2009
Сообщений: 4,416
Записей в блоге: 2
12.12.2017, 22:20 12
Цитата Сообщение от _BoGdaN_ Посмотреть сообщение
про ajax знаю, но кажется сейчас это уже прошлый век
браузер с php не работает.
Цитата Сообщение от _BoGdaN_ Посмотреть сообщение
или ajax
у тебя на странице есть форма для отправки сообщений. php скрипт записывает эти сообщения в базу.
ajax периодически делает запрос к серверу, например раз в 10 секунд, получает данные и обновляет страницу(часть страницы).
0
19 / 1 / 3
Регистрация: 02.11.2016
Сообщений: 132
12.12.2017, 22:25  [ТС] 13
Цитата Сообщение от Grey Посмотреть сообщение
браузер с php не работает.
Grey, А к чему это? я не много не понимаю.

Добавлено через 1 минуту
Цитата Сообщение от Grey Посмотреть сообщение
у тебя на странице есть форма для отправки сообщений. php скрипт записывает эти сообщения в базу.
ajax периодически делает запрос к серверу, например раз в 10 секунд, получает данные и обновляет страницу(часть страницы).
Grey, это да, но я пытаюсь разобраться с websocket, они мне поинтересней смотрятся)
0
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
12.12.2017, 22:25 14
Цитата Сообщение от _BoGdaN_ Посмотреть сообщение
а сам код какой выбрать???
Написать новый, используя документацию на оф сайте. Для начала можно написать сервер, отвечающий на все запросы hello world и клиент, который будет делать на него запрос и получать ответ. В документации это все можно найти
0
19 / 1 / 3
Регистрация: 02.11.2016
Сообщений: 132
12.12.2017, 22:28  [ТС] 15
Jewbacabra, ого) через консоль работает)) и через браузер тоже)
PHP
1
2
3
4
5
<?php
//client
    $socket = stream_socket_client('tcp://127.0.0.1:8888');
    fwrite($socket, "GG");
    fclose($socket);
PHP
1
2
3
4
5
6
7
//server
<?php
    $socket_server = stream_socket_server('tcp://127.0.0.1:8888');
    $socket = stream_socket_accept($socket_server, -1);
    echo fread($socket, 1024);
    fclose($socket);
    fclose($socket_server);
0
19 / 1 / 3
Регистрация: 02.11.2016
Сообщений: 132
12.12.2017, 22:29  [ТС] 16
Вот вывело все)
Миниатюры
Как сделать чат между двумя пользователями без перезагрузки страницы?  
0
19 / 1 / 3
Регистрация: 02.11.2016
Сообщений: 132
12.12.2017, 22:33  [ТС] 17
Теперь другой вопрос, что вообще что должен содержать сервер?
0
Тутошний я
2146 / 1201 / 225
Регистрация: 03.11.2009
Сообщений: 4,416
Записей в блоге: 2
12.12.2017, 22:34 18
Цитата Сообщение от _BoGdaN_ Посмотреть сообщение
Grey, А к чему это? я не много не понимаю.
да так, к словам придираюсь
браузер не работает с php. браузер работает с html.
браузер если и работает с сокетами, то это скрыто глубоко внутри него. с твоими вебсокетами он работать не будет.

сокеты можно запустить из своей программы. или из консоли, как выше написали.
но в консоли и в своей программе нет перезагрузки страниц.
и в консоли не всем удобно работать. я например не умею.
0
19 / 1 / 3
Регистрация: 02.11.2016
Сообщений: 132
12.12.2017, 22:40  [ТС] 19
Jewbacabra, И главное мне не понятно, где этот сервер должен быть? Как сделать, что бы могло много пользователей подключится? И нужен ли ему отдельный поток? И еще, то есть, что бы каждый клиент подключался к серверу, нужно что бы каждый стал клиентом и тут я вообще запутался...

Добавлено через 54 секунды
Цитата Сообщение от Grey Посмотреть сообщение
да так, к словам придираюсь
браузер не работает с php. браузер работает с html.
браузер если и работает с сокетами, то это скрыто глубоко внутри него. с твоими вебсокетами он работать не будет.
сокеты можно запустить из своей программы. или из консоли, как выше написали.
но в консоли и в своей программе нет перезагрузки страниц.
и в консоли не всем удобно работать. я например не умею.
Но вот в браузере вывело, точнее php вывел, но все же) раньше и этого не было)

Добавлено через 45 секунд
Grey, самое обидное с раскрытием маленького вопроса, появилось еще 100)

Добавлено через 1 минуту
Когда нужно идти спать, но хочешь найти ответы на свои вопросы и не идешь спать((
0
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
12.12.2017, 22:44 20
Цитата Сообщение от _BoGdaN_ Посмотреть сообщение
И главное мне не понятно, где этот сервер должен быть?
Это обычный php скрипт. В консоли php server.php и сервер работает (до первой ошибки)
Цитата Сообщение от _BoGdaN_ Посмотреть сообщение
Как сделать, что бы могло много пользователей подключится?
В документации все есть. Смотри stream_socket_accept
Цитата Сообщение от _BoGdaN_ Посмотреть сообщение
И нужен ли ему отдельный поток?
Будет однопоточный. Если хочется много потоков, то придется делать руками.

Цитата Сообщение от Grey Посмотреть сообщение
с твоими вебсокетами он работать не будет.
Будет. Если все правильно сделать
0
12.12.2017, 22:44
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.12.2017, 22:44
Помогаю со студенческими работами здесь

Как удалить запись из БД без перезагрузки страницы?
Как удалить запись из БД без перезагрузки страницы, не только у меня, но и у всех у кого открыта...

Как вытащить из БД данные без перезагрузки страницы?
Пожалуйста помогите мне с моим сайтом. Объясните мне пожалуйста одно. У меня есть страница, на...

Как без перезагрузки страницы отправить письмо
&lt;form name=&quot;form-application&quot; id=&quot;contact-form&quot; role=&quot;form&quot; action=&quot;php/mail.php&quot;...

Как отправить переменную с js на php без перезагрузки страницы?
есть переменная a её нужно отравить в php код как это можно реализовать? &lt;!DOCTYPE html&gt;...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru