Сегодня я впервые использую 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? Я видел несколько библиотек в Интернете, но я хотел бы знать, есть ли стандартный или лучший способ сделать это.
Обратите внимание, что мой скрипт на сервере работает без каких-либо ошибок, хотя у меня не было возможности установить соединение
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"}');
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