WedX - журнал о программировании и компьютерных науках

PHP, создающий веб-сокет, приводит к отказу в доступе

Я использую эту библиотеку веб-сокетов PHP для подключения к незащищенный сервер веб-сокетов. На локальном хосте с использованием XAMPP все работает нормально. Я могу создать сервер и успешно подключиться к нему на стороне клиента с помощью JavaScript, используя

новый WebSocket('ws://mywebsite.com:80/dashboard');

Однако теперь я хочу создать веб-сокет на живом http-сайте (общий хост cpanel). У меня есть доступ к SHELL, но я не могу создавать/открывать порты, поэтому мне приходится использовать порт 80 по умолчанию для создания сервера веб-сокетов.

Теперь проблема заключается в том, что при выполнении файла PHP в SHELL для создания сервера веб-сокетов я получаю эту ошибку: PHP Warning: stream_socket_server(): unable to connect to tcp://www.mywebsite.com:80 (Permission denied)

php public_html/websocket/server.php

Кто-нибудь знает, почему он говорит, что разрешение отклонено, поскольку порт всегда открыт.

$this->context = stream_context_create();
stream_socket_server("tcp://www.mywebsite.com:80", $errno, $err, STREAM_SERVER_BIND|STREAM_SERVER_LISTEN, $this->context)

У меня такое ощущение, что что-то не так с 'stream_context_create()' в Socket.php. Возможно ли это или вы знаете другую причину, по которой я не могу создать сервер веб-сокетов?

22.04.2017

Ответы:


1

По умолчанию порты ниже 1024 могут быть открыты только пользователем root. Root-доступ запрещен большинством провайдеров виртуального хостинга.

Вы можете проверить, какие порты выше 1024 открыты, и запустить свой сервер на одном из них.

Альтернативой является переход на VPS, у вас могут быть дешевые инстансы в DigitalOcean или даже в AWS (экземпляры бесплатного уровня)

22.04.2017
  • Спасибо за ответ. На самом деле я не хочу vps, потому что запуск сервера веб-сокетов на порту 80 на общем хосте должен быть возможен, верно? На самом деле использование функции PHP stream_socket_client успешно создает сервер на общем хосте, но затем возникает другая проблема: я не могу подключиться к серверу с помощью функции javascript, упомянутой в первом сообщении. Я действительно не знаю, что не так в этом случае... 22.04.2017
  • @Piet Разве вы не сказали в своем посте, что вам отказали в разрешении? Вы решили эту проблему? 22.04.2017
  • Вот так. Итак, будьте ясны, есть 2 ситуации. Во-первых, когда я использую stream_socket_server, это приведет к отказу в разрешении. Вторая ситуация: когда я использую stream_socket_client вместо 'stream_socket_server', в этой ситуации сервер сокетов PHP работает нормально, но все же я не могу подключиться к серверу с помощью Javascript (он выдаст ошибку 302 в консоли разработчиков браузер). 22.04.2017
  • @Piet, но пытаетесь ли вы подключиться к веб-сокету своего сервера или к стороннему веб-сокету, потому что, если вы пытаетесь подключиться к своему серверу веб-сокета, когда вы не можете запустить сервер, который не будет работать, я немного смущенный... 22.04.2017
  • Давайте немного спамим здесь, поэтому SO создаст чат, где вы сможете объяснить проблему немного подробнее. 22.04.2017
  • Извините, если я неясен, я пытался объяснить всю ситуацию здесь pastebin.com/RSZbNB6t 23.04.2017
  • Давайте продолжим обсуждение в чате. 23.04.2017
  • Новые материалы

    Объяснение документов 02: BERT
    BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

    Как проанализировать работу вашего классификатора?
    Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

    Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
    Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

    Учебные заметки: создание моего первого пакета Node.js
    Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

    Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
    Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..


    Для любых предложений по сайту: [email protected]