Как применять вебсокеты js в связке с php?

139
07 февраля 2018, 13:56

Привет!

Хочу написать простенький чат на сокетах js. В js это реализовано на стандарте RFC 6455, открытие сокета производится следующей строчкой:

var socket = new WebSocket("ws://example.com/chat");, указываем соответствующий протокол и домен, а далее /chat, это имя папки или что? На ajax необходимо указать путь к конкретному файлу (например example.com/chat/chat.php), а что здесь и можно ли создавать несколько сокет-соединений на одном домене?

Еще не понятно как это всё обрабатывать на стороне сервера (php), все примеры которые я встречал были на node.js, а что с php, подскажите?

Answer 1

Ты можешь создать сокет соединение на php, код ниже. Далее ты попросту обрабатываешь все сообщения которые приходят. В браузере на js уже подключаешься к 127.0.0.1:8000.

$socket = stream_socket_server("tcp://127.0.0.1:8000", $errno, $errstr);
while ($connect = stream_socket_accept($socket, -1)) {
   // ...обрабатываем $connect
}

Подробнее можно прочитать тут - https://habrahabr.ru/post/209864/

Answer 2

В первую очередь нужно понять что сокет соеденение состоит из двух частей.
1.Сокет клиент который подключает к определенному порту (скажем 8080)
2. Сокет сервер который слушает определенный порт (8080) и если ему обратился сокетКлиент то создается соединение.

В js нужно естественно писать точный адресс. Обязательно указовать порт потому что сокет сидит только в канкретном порту. т.е. адрес выглядит как то так "192.168.1.1:8080". Это пример подключения к конкретному 8080 порту. Можно указать любой порт. Желательно редкий. Если порт будет занят то сокет не заработает. что насчет Реализации на пхп. Если честно на пхп сокет не серьезно. Именна изза сокета я в свое время перешол на Ява для веб и не пожелел. Но думаю если захотеть то можно найти примеры. Если не ошибаюсь я видел какойто готовый фреймворк толи библиотеку на пхп для реализации чата с помощью сокета. RedChat кажется точно не помню. Если вы не пишите серьезный чат то можно возпользоваться но если хотите серьезное программу которая работала без отказна то переходи на что нибудь по серьезней. Я сделал выбор в сторону Java. Выбор большой от c# до python.
Ну и еще если вы новичек (а вы скорее всего новичек) То оссобенность сокета в том что простой запрос проходит по схеме запрос->ответ->соединение разрывается то сокет просто соеденяется и не разрывает соеденение пока один из них не захочит выйти. Сокет соединяется и нужно там в бесконечно цикле выводить данные. при каждой итерации js будит ловить отправленные тобой данные и делать че надо. Сокет на пхп мне лично показался геморойным когда я хотел ее изучить. Я нашел хороший пример от Михаила Русакова. Вбей в гугл там в топах найдешь. Хороший робочий пример.
Удачи в освоении программирования

READ ALSO
Задействовать нужное количество IP адресов

Задействовать нужное количество IP адресов

Как подключить к программе несколько ip? Чтобы расширить локальные порты 2*65535

194
Почему std::find не использует мой operator==?

Почему std::find не использует мой operator==?

Я реализовал свою перегрузку operator== для сравнения своего std::pair<

284
Ошибка при генерации случайных чисел

Ошибка при генерации случайных чисел

Пытаюсь сделать рандом, используя c++11Делаю так:

247
Когда пишу if (Serial.read() == &#39;qwerty&#39;) arduino не правильно понимает

Когда пишу if (Serial.read() == 'qwerty') arduino не правильно понимает

Тут вроде все норм, а снизу неочень

267