Я запускаю сервер Node.js WebSocket через порт 3000 на той же машине, где я использую Apache / PHP, используя обратный прокси-сервер через Apache.Это мой файл HTTPD:
<VirtualHost *:80>
ProxyRequests off
SSLProxyEngine on
ProxyPass /node/ ws://localhost:3000/node/
ProxyPassReverse /node/ ws://localhost:3000/node/
</VirtualHost>
<VirtualHost *:443>
ProxyRequests off
SSLProxyEngine on
ProxyPass /node/ ws://localhost:3000/node/
ProxyPassReverse /node/ ws://localhost:3000/node/
</VirtualHost>
Допустим, мое доменное имя - "example.com".Затем, чтобы подключиться к серверу WebSocket через браузер, я бы использовал этот JS:
var connection = new WebSocket("wss://example.com/node/");
Это нормально работает, и я успешно отправляю и получаю сообщения из браузеров.
ОднакоМне также нужно иметь возможность отправлять (не получать) сообщения на сервер WebSocket, используя PHP, с той же машины.Я пробовал несколько конфигураций fsockopen, и ни одна из них не работала.Вот те, которые я пробовал, с получающимися сообщениями об ошибках:
$fp = fsockopen("example.com/node/", 3000); //php_network_getaddresses: getaddrinfo failed: Name or service not known
$fp = fsockopen("ssl://example.com/node/", 3000); //php_network_getaddresses: getaddrinfo failed: Name or service not known
$fp = fsockopen("tls://example.com/node/", 3000); //php_network_getaddresses: getaddrinfo failed: Name or service not known
$fp = fsockopen("http://example.com/node/", 3000); //Unable to find the socket transport "http" - did you forget to enable it when you configured PHP?
$fp = fsockopen("https://example.com/node/", 3000); //Unable to find the socket transport "https" - did you forget to enable it when you configured PHP?
$fp = fsockopen("wss://example.com/node/", 3000); //Unable to find the socket transport "wss" - did you forget to enable it when you configured PHP?
$fp = fsockopen("ws://example.com/node/", 3000); //Unable to find the socket transport "ws" - did you forget to enable it when you configured PHP?
$fp = fsockopen("example.com/node/", 443); //php_network_getaddresses: getaddrinfo failed: Name or service not known
$fp = fsockopen("ssl://example.com/node/", 443); //php_network_getaddresses: getaddrinfo failed: Name or service not known
$fp = fsockopen("tls://example.com/node/", 443); //php_network_getaddresses: getaddrinfo failed: Name or service not known
$fp = fsockopen("http://example.com/node/", 443); //Unable to find the socket transport "http" - did you forget to enable it when you configured PHP?
$fp = fsockopen("https://example.com/node/", 443); //Unable to find the socket transport "https" - did you forget to enable it when you configured PHP?
$fp = fsockopen("wss://example.com/node/", 443); //Unable to find the socket transport "wss" - did you forget to enable it when you configured PHP?
$fp = fsockopen("ws://example.com/node/", 443); //Unable to find the socket transport "ws" - did you forget to enable it when you configured PHP?
$fp = fsockopen("example.com/node/", 80); //php_network_getaddresses: getaddrinfo failed: Name or service not known
$fp = fsockopen("ssl://example.com/node/", 80); //php_network_getaddresses: getaddrinfo failed: Name or service not known
$fp = fsockopen("tls://example.com/node/", 80); //php_network_getaddresses: getaddrinfo failed: Name or service not known
$fp = fsockopen("http://example.com/node/", 80); //Unable to find the socket transport "http" - did you forget to enable it when you configured PHP?
$fp = fsockopen("https://example.com/node/", 80); //Unable to find the socket transport "https" - did you forget to enable it when you configured PHP?
$fp = fsockopen("wss://example.com/node/", 80); //Unable to find the socket transport "wss" - did you forget to enable it when you configured PHP?
$fp = fsockopen("ws://example.com/node/", 80); //Unable to find the socket transport "ws" - did you forget to enable it when you configured PHP?
Я также попробовал все эти конфигурации, используя "localhost" и "127.0.0.1".И я также экспериментировал с использованием встроенных функций библиотеки PHP socket_create и socket_connect со всеми теми же именами хостов, IP-адресами и портами - все это приводило к тем же типам ошибок «неизвестного хоста».Что я делаю неправильно?Как правильно это сделать?