Я только начинаю изучать nodeJS, а также следую руководству по базовому чату socket.io. У меня есть вопросы, я уверен, что они кажутся невежественными, но я действительно хочу их понять:
1) nodeJS например "слушает" localhost:8080. Но допустим, я хочу, чтобы чат socket.io был на определенной странице: localhost/chat.html, как мне заставить эту систему чата работать на localhost/chat.html, а не на localhost:8080
(так что пользователь нажимает ссылку "chat.html", и сервер чата запускается только тогда, когда находится на этой странице)
2) Для чата я хочу разрешить только зарегистрированным и вошедшим в систему пользователям просматривать эту страницу localhost / chat.html. С PHP я бы просто проверил, установлен ли сеанс с помощью isset $_SESSION, и получил идентификатор пользователя из этого сеанса, как я могу запустить сеанс с помощью PHP с файлом nodeJS?





how do I make that chat system to work on localhost/chat.html, and not on localhost:8080
Порт по умолчанию для HTTP - 80. http://localhost/ подразумевает http://localhost:80/. Если хотите, вы можете заставить Node.js прослушивать порт 80.
(so that a user clicks on "chat.html" link and the chat server starts only when in that page)
Что ж, эта часть вопроса - ерунда. Сервер должен быть запущен, чтобы он был доступен для получения запроса при его поступлении.
With PHP I would simply check if a session is set using isset $_SESSION and get the id of the user from that session, how can I get the session started by PHP, with the nodeJS file?
Сеансы PHP обычно работают через cookie. Вы также можете использовать файлы cookie в своем приложении Node.js. Чтобы упростить себе задачу, подумайте об установке Express и одного из множества обработчиков данных сеанса, которые подключаются к нему как к модулю.
Вы путаете прослушивание (привязку к сетевому адресу и порту) и маршрутизацию HTTP-пути. Они совершенно не связаны. На каком хостинге размещается ваша статическая страница чата?
Определенно, просто я впервые использую nodeJS. Проблема в том, что я никогда не занимался этим. Даже учебник по чату socket.io запускает чат, только когда вы вводите localhost: 8080 в адресной строке, что мне нужно сделать, чтобы он работал, когда вы вместо этого набираете localhost / chat.html (при условии, что там находится файл чата) ? Как вы маршрутизируете его в узле?
Какое отношение Socket.IO имеет к вашей статической странице чата? Я понятия не имею, каковы ваши текущие настройки. Вы вообще не вдавались в подробности. Я еще раз спрашиваю, на каком хостинге размещена ваша текущая страница? Вы говорите, что уже позаботились о маршрутизации, и это на /chat-system/chat.html. Итак, просто измените это и сделайте /chat.html? Я не понимаю вашего вопроса.
Я следую их руководству на socket.io/get-started/chat, и это настройка, они не объясняют, как заставить его работать, когда вы напрямую переходите на localhost / chat-example / index.html (это где HTML и CSS чата), но вместо этого вы необходимо ввести localhost: 8080 (если я напрямую наберу localhost / chat-example / index.html - тогда события не будут прослушиваться, вы увидите, что в консоли ничего не происходит)
Как я уже сказал вам, если вы измените свой сервер на прослушивание порта 80, вы можете использовать неявный порт 80 в URL ... http://localhost/. Что касается маршрутизации, в этом руководстве вы используете Express. Маршрут по умолчанию настроен с помощью app.get('/', ..., и он жестко запрограммирован для отправки index.html, который является файлом, который вы создали. Вы можете просто заменить / на /chat.html, а затем я бы тоже переименовал файл. А еще лучше использовать статическое промежуточное ПО Express. (Прочтите документацию по Express, чтобы узнать, как это использовать. expressjs.com/en/starter/static-files.html)
Сделаю, спасибо за помощь! (Сначала не понимал, что вы имели в виду, что когда вы ссылались на порт 80, кстати, только порт 80 является неявным? Так что, даже если я чатаю '/' в 'chat.html', мне нужно будет ввести localhost / chat.html : 8080, а если я не поменяю на 80?
Позвольте нам продолжить обсуждение в чате.
@pileup Нет, это работает совсем не так. Перед тем, как продолжить работу с приложением, вам следует ознакомиться с частями URL-адреса и основами HTTP. Если ваше приложение прослушивает порт 80, и у вас есть маршрут для /chat.html, вы можете использовать http://localhost/chat.html в качестве URL-адреса. Если вы слушаете порт 8080, URL будет http://localhost:8080/chat.html. Это [протокол] [хост] [порт] [путь] [строка запроса].
Я плохо отношусь к путанице с расположением порта, очевидно, мне нужно больше исследований (я новичок, как вы уже догадались), но более важно то, что только порт 80 позволяет вам быть неявным! Таким образом, вы не можете быть гибкими, если хотите «более приятного» взаимодействия с пользователем - если вы не хотите, чтобы пользователи видели числа в адресной строке, вы должны использовать порт 80? (Или иначе испортите конфигурацию сервера / файлы htaccess)
@pileup Да, вы должны использовать порт 80 для HTTP. Не то чтобы браузер мог читать ваши мысли относительно того, к какому порту вы хотите подключиться. Записи DNS SRV так и не стали частью HTTP. Почему это проблема?
Понятно, но все еще что-то неясно: теперь сервер прослушивает localhost: 80, хорошо, но я не хочу, чтобы сам чат запускался только тогда, когда пользователь вводит в адресную строку "localhost: 80". Я хочу, чтобы слушатель обнаруживать события, когда пользователь фактически переходит по ссылке chat.html, а не по адресу с портом (пример: мой файл чата находится по адресу localhost / chat-system / chat.html)