NodeJS и веб-сокеты

1

Сегодня я впервые использую NodeJS и Socket.io. Я разработал веб-сайт с фреймворком PHP и хотел бы добавить функции уведомления и чата. Я следую учебнику на веб-сайте Socket.io, пытаясь приспособить его к моим потребностям, но у меня есть несколько вопросов.

  • Во-первых, я вижу, что они создают HTTP-сервер. Я хочу, чтобы веб-сайт работал как обычно, то есть HTTP-запросы обрабатывались одинаково, но, кроме того, я хотел бы, чтобы веб-сайт создавался всякий раз, когда загружалась страница. Поэтому вместо

    var http = require('http').Server(app);
    http.listen(3000, function(){ console.log('listening on *:3000'); });
    

мы могли бы создать сервер websocket и вместо этого использовать протокол WS? Я видел несколько библиотек в Интернете, но я хотел бы знать, есть ли стандартный или лучший способ сделать это.

  • Другое дело, что я не могу найти правильный путь к серверному скрипту Socket.io. Поэтому соединение не может быть установлено. Из того, что я видел в Интернете, он должен выглядеть как DOMAIN/socket.io: 3000. Теперь я теряюсь с тех пор, как я впервые использовал Node: где я могу найти этот файл "socket.io" на сервере? В моей папке проекта все, что я вижу, это папка node_modules (в которую входит папка socket.io, но я не уверен, как ее использовать).

Обратите внимание, что мой скрипт на сервере работает без каких-либо ошибок, хотя у меня не было возможности установить соединение

var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);

http.listen(3000, function(){
    console.log('listening on *:3000');
});

io.on('connection', function(socket){
    console.log('a user connected');
});

Здесь текущий код на стороне клиента:

var socket = io('<?php echo base_url(); ?>:3000, {path: "/sockets/socket.io"}');
Теги:
sockets
websocket

1 ответ

0

NodeJS - это веб-сервер. В отличие от PHP, вы можете запускать несколько серверов на разных портах с одного сервера. Таким образом, создается веб-сервер:

var app = require('express')();
var http = require('http').Server(app);

http.get("/",(req,res)=>res.write("Hello World"));

http.listen(3000, function(){
console.log('listening on *:3000');
});

И это сокет:

var io = require('socket.io')(http);
io.on('connection', function(socket){
console.log('a user connected');
});

Обратите внимание, что Socket.io нуждается в веб-сервере для их рукопожатия, поэтому необходим дополнительный HTTP-сервер. Однако вам не нужно использовать этот сервер для обслуживания страниц, чтобы вы могли:

var io = require("socket.io")(8000);//creates a webserver on port 8000, no need to do more with the pure http server
io.on('connection', function(socket){
console.log('a user connected');
});

В отличие от PHP вам не нужно вставлять скрипты, вы можете импортировать их:

var so=require("socket.io");//works if socket.io is installed in modules
  • 0
    1) Если я оставлю верхнюю часть, как мне указать, какой порт слушать? 2) Почему я должен использовать протокол http, а не протокол ws?
  • 0
    @ user1319182 ws не поддерживается всеми браузерами и т. д. Поэтому необходим http-сервер.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню