Можно ли запустить WebSocket по переходу на страницу?

Ссылка скопирована
1 ответ

Пробовал ли кто ни будь запустить веб сокет при переходе по ссылке. Поясню.
Как правило веб сокет это фоновый скрипт который запускает сокет и обрабатывает подключения и прочее.

Можно ли сделать такое что бы при переходе по ссылке "wss://example.ru/ws.php" запускался сокет и сразу же подключался к нему (это получается что какой то временный сокет, который действует пока открыта страница).

Если вот вообще проще. Временный сокет созданный по запросу.

Дополнительно:

Так чем именно "временный" сокет отличает от обычного? преимущества сокетов именно в постоянном соединение. Вообще, вопрос надо начать с описания какую именно проблему ты хочешь решить.

  • Everything_is_bad, сама суть веб сокета остается. Временный он потому что он действует пока открыта страница в браузере или пока есть соединение в самим сокетом. Если перезагрузить страницу или закрыть ее сам сокет уничтожается на сервере и при переходе по ссылке он запускается заново
  • Валера Карманов, А если несколько человек одновременно открыли эту страницу?
    Достоинство вебсокета это как раз постоянная работа. Клиент подключается, работает, отключается, а сервер вебсокета остаётся работать с другими подключившимися и ждёт новых подключений.
  • Rsa97, думаю можно будет сделать так что бы сокет запускался только в первый запрос если он еще не запущен. остальные разу уже подключаться к существующему...
  • Валера Карманов, Смысл? Что мешает просто держать WS-сервер запущенным?
  • Временный он потому что он действует пока открыта страница в браузере или пока есть соединение в самим сокетом.

    Вы описываете решение, а не задачу. А про задачу спрашивают, потому что зная ее, возможно, решать надо другим способом. Так, я не вижу причин, почему бы ws-сокет демону не работать постоянно, на то он и демон.
    Выглядит очень странно, но в чем проблема? Пришел запрос по http - запускаете демона, демон видит, что все отключились - закрывается.
    Дополнительно, нужно посмотреть как настроить systemd unit, чтобы он перезапускался только при ошибке. И если клиент отвалился некорректно, то контролировать это, либо забить, если быстрая реакция не важна.

  • Ответы:

    Да, вполне можно, создавайте. Только вот для перехода по ссылке вида wss://*** потребуется именно WS клиент, а если переход по ссылке в браузере - то этот протокол должен быть зарегистрирован в системе для опеределнного WS приложения, которое и обработает эту ссылку. Если вы имеете ввиду под переходом по ссылке клик по ссылке в браузере и переход на веб страницу, для которой запустится веб-сокет сервер - то да, так тоже можно. При выполнении скрипта на сервере надо будет просто инициировать запуск веб-сокет сервера, а на странице подключаться к нему.

    • При переходе по ссылке я имею ввиду в коде на JS но не в адресной строке браузера.

      Какой тип сокета должен быть для этого? Типа:

      $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);

      $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);

      не понимаю как создать правильно сокет и оставить код который будет выполняться при новом подключении. Использование "while" мне кажется не прокатит

    • Вообще-то сокет и веб-сокет - это разные вещи. Вы пишете свою реализацию WebSocket протокола? Если так, то рекомендую посмотреть в исходный код уже существующих реализаций. Если вам просто нужен WS сервер - то используйте готовое решение и документацию к нему. А еще лучше - не PHP, ибо использовать в WS в PHP не очень-то удобно.
    • Валера Карманов, не стоит заморачиваться, все описания реализации вебсокетов на php в рунете малополезные эксперименты. На php написан workerman, работает как часы прямо из коробки: https://github.com/walkor/workerman

    При переходе на wss://example.ru/ws.php, нужно проанализировать заголовки - браузер хочет получить стартовую заготовку html, или уже отправляет запросы ws. Если как html, то отдать контент страницы, если как ws, то смотреть что нужно для ws сессии.

    • Переход по ссылке "wss://example.ru/ws.php" не как GET запрос а на JS
    • сама ссылка уже должна возвращать подключенный веб сокет
    Нужно решить такую задачу?

    Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

    Заказать помощь
    Лучший ответ
    1
    Кирилл JS Ответ

    Да, можно запустить WebSocket при переходе на страницу. Для этого вам потребуется написать соответствующий JavaScript код, который будет устанавливать соединение с сервером WebSocket при загрузке страницы.

    Вот пример кода на JavaScript, который позволяет установить соединение с сервером WebSocket при загрузке страницы:

    window.addEventListener('load', function() {
      var socket = new WebSocket('ws://ссылка_на_ваш_сервер_websocket');
     
      socket.onopen = function() {
        console.log('Соединение установлено');
      };
     
      socket.onmessage = function(event) {
        console.log('Получены данные: ' + event.data);
      };
     
      socket.onclose = function() {
        console.log('Соединение закрыто');
      };
     
      socket.onerror = function(error) {
        console.error('Произошла ошибка: ' + error.message);
      };
    });

    window.addEventListener('load', function() { var socket = new WebSocket('ws://ссылка_на_ваш_сервер_websocket'); socket.onopen = function() { console.log('Соединение установлено'); }; socket.onmessage = function(event) { console.log('Получены данные: ' + event.data); }; socket.onclose = function() { console.log('Соединение закрыто'); }; socket.onerror = function(error) { console.error('Произошла ошибка: ' + error.message); }; });

    В этом коде мы используем метод `addEventListener` для добавления слушателя события `load`, который будет запускать функцию при загрузке страницы. Внутри этой функции мы создаем новый объект WebSocket, указывая ссылку на сервер WebSocket. Затем мы устанавливаем обработчики событий `onopen`, `onmessage`, `onclose` и `onerror`, которые будут отслеживать соединение, получение данных, закрытие соединения и ошибки соответственно.

    Таким образом, код выше позволит запустить WebSocket при переходе на страницу. Не забудьте заменить `ссылка_на_ваш_сервер_websocket` на реальную ссылку на ваш сервер WebSocket.

    Другие ответы (0)

    Пока нет других ответов. Будьте первым, кто поможет автору.

    Ответить на вопрос

    комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *

    Вам также может быть интересно