За последние 24 часа нас посетили 39043 программиста и 1285 роботов. Сейчас ищут 1027 программистов ...

Реализация личных сообщений

Тема в разделе "PHP для новичков", создана пользователем Danil005, 27 май 2017.

  1. Danil005

    Danil005 Активный пользователь

    С нами с:
    2 янв 2015
    Сообщения:
    528
    Симпатии:
    30
    Как реализовать личные сообщения PHP в RealTime.
    Я понимаю обычную логику с базой данной:
    Код (Text):
    1. id - номер сообщения
    2. form - откуда
    3. to - куда
    4. date - дата
    5. read - прочитано иль нет
    Это простая схема с базой данной, но как теперь это связать с базой данной?
    Если делать через Ajax, а именно такой код при отправки сообщения:
    Код (Javascript):
    1. $("[data-action='send_msg']").on( "click", function() {
    2.  
    3.                 jQuery.ajax({
    4.                     url:      "ajax/send.php",
    5.                     type:     "POST",
    6.                     dataType: "html",
    7.                     data: jQuery("#msg_inpute").serialize(),
    8.                     success: function(response) {
    9.                     $('#text').text(response);
    10.                    
    11.                 },
    12.                 error: function(response) {
    13.                    notification('Внутренняя ошибка. (#FFF01)', 'error', 5000);
    14.                 }
    15.              });
    16.  
    17. });
    Здесь все понятно, кроме одного, как сделать, чтобы скрипт именно добавлял дополнительные поля, а не заменял уже написанное сообщение?
    Затем, каким образом сделать, чтобы при отправки от другого пользователя сообщения, отображение его у меня. Есть вариант постоянно делать Update div с циклом, но это мягко говоря глупо и затратно по запросам к БД.
    Следующий вариант ждать от другого пользователя запрос на сервер, а с другой стороны, то есть с клиентской, её как-то обрабатывать. Вот на этом варианте я и остановился. Сколько не смотря документации по WebSocket, ничего толком не понятно. Правда я пробовал только с Socket.Io, но с ним так и не разобрался. Посоветуйте решение, или какой-нибудь другой WebSocket с более понятной документацией.
     
  2. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    раз уже используешь jquery посмотри у него append

    Что конкретно не понятно? В интернете полно чатов на websockets и они простые
     
  3. Danil005

    Danil005 Активный пользователь

    С нами с:
    2 янв 2015
    Сообщения:
    528
    Симпатии:
    30
    Извините за долгий ответ. Именно как связать сайт с node, какой порт прослушивания нужно устанавливать и как сделать связь с базой данной, да при этом проверять авторизирован ли пользователь, иль нет. По логике проверка идет через Class ООП, но я не знаю, можно ли связать этот класс со скриптом php.
     
  4. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Использовать https://learn.javascript.ru/websockets или библиотеки которые с ним работают

    https://tools.ietf.org/html/rfc6455 и https://ru.wikipedia.org/wiki/WebSocket
    использовать можно 80 порт или 443, просто если у тебя на этом IP уже есть веб сервер, порт можешь выбрать другой

    используй базу данных из node, её и из PHP можно так же использовать если нужно

    https://habrahabr.ru/post/200866/ тут что-то про авторизацию есть
     
  5. Danil005

    Danil005 Активный пользователь

    С нами с:
    2 янв 2015
    Сообщения:
    528
    Симпатии:
    30
    @denis01
    var socket = new WebSocket("ws://javascript.ru/ws");
    Где взять адрес протокола? Или можно свой адрес сайта вводить и это будет называться протоколом?
     
  6. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    ws:// протокол там указываться, чтобы клиент знал что ожидать от сервера

    главное чтобы там был настроен websocket сервер,
    например ws:// по умолчанию пойдёт на 80 порт, а wss:// на 443, это как http:// и https://.
    вот для node есть https://www.npmjs.com/package/websocket для него есть пример https://github.com/theturtle32/WebSocket-Node/blob/master/example/whiteboard/whiteboard.js

    там сервер запускают на 8080 порту без шифрования
    Код (Javascript):
    1. app.listen(8080); // на сервере
    , значит адрес ws://тут ip сервера или домен:8080
    Код (Javascript):
    1. var url = "ws://" + document.URL.substr(7).split('/')[0]; // на клиенте https://github.com/theturtle32/WebSocket-Node/blob/master/example/whiteboard/public/client.js
    --- Добавлено ---самый простой вариант это использовать socket.io, там node уже настроен + клиент и сервер
    --- Добавлено ---
    для socket.io есть даже чат как пример https://socket.io/demos/chat/ там и исходный код View source code
     
    mahmuzar нравится это.
  7. Danil005

    Danil005 Активный пользователь

    С нами с:
    2 янв 2015
    Сообщения:
    528
    Симпатии:
    30
    Вот socket.io я и не понимаю, а именно постоянно через терминал запускать скрипт, если на локалке то получается адрес localhost:8080
    А на хосте вообще не работает. Хост поддерживает - Макхост
     
  8. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.598
    Симпатии:
    1.764
    https://pusher.com - можно использовать, если свой сервер websocket написать слабо
     
    denis01 нравится это.
  9. Danil005

    Danil005 Активный пользователь

    С нами с:
    2 янв 2015
    Сообщения:
    528
    Симпатии:
    30
    @denis01
    Как "подружить" socket.io с PHP, а именно передать логин пользователя? Я знаю банальный способ это на странице сделать так:
    Код (Javascript):
    1. var username='<?=$user?>';
    А после передавать в сам скрипт, но это будет не приемлемо, особенно если буду запросы.
     
  10. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    ты хочешь автоматически в чате залогинить пользователя который уже входил через PHP?
     
  11. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    Centrifugo. Это приложение для раздачи сообщений клиентам. Оно не отменяет необходимость продуматб хранение сообщений, но красиво и правильно решает проблему доставки сообщений real-time https://opensource.mail.ru/Centrifugo
    PHP передает сообщение в центрифугу - а она передает их браузерам получателей.
     
    TeslaFeo нравится это.
  12. Danil005

    Danil005 Активный пользователь

    С нами с:
    2 янв 2015
    Сообщения:
    528
    Симпатии:
    30
    Да.