Направете xampp и node(socket.io) да работят заедно

Имам малко уеб приложение, което прилага някои AngularJS и php за някои функции и някои заявки от базата данни (Apache и mySQL на xampp). Сега искам да кандидатствам за обикновен чат в уеб приложението и не знам как да конфигурирам нито какви портове и т.н.

След нещо подобно на http://socket.io/get-started/chat/

Имам index.js като такъв

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

app.get('/', function(req, res){
   res.sendFile(__dirname + '/index.html');

});

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


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

Опитвам порт 443 и 80, но изглежда не работят (xampp показва 80 и 443, нямам представа как работят портовете)

тогава моят JS файл има var socket = io();

В моята конзола на браузъра получавам нещо подобно

socket.io-1.2.0.js:2 GET http://localhost/socket.io/?IO=3&transport=polling&t=1465649664392-0 404 (Not Found)

Как да разреша този проблем? Очаквам резултат като a user connected в cmd след стартиране на node index.js, но не го правя.

Следвах примера за чата и той работи добре без xampp.


person Lester    schedule 11.06.2016    source източник


Отговори (3)


Вашият проблем е, че за да работи socket.io, той трябва да може да комуникира с задната част през http (напр. да превключи протокола). Но ако xampp използва порта, няма да работи. Вероятно бихте могли да опитате нещо, при което вашият xampp препраща заявки към http://localhost/socket.io/* към node.js сървъра.

Можете да използвате https://stackoverflow.com/a/18604082/6430127 и да направите нещо като

RewriteEngine On
RewriteCond %{REQUEST_URI}  ^/socket.io            [NC]
RewriteCond %{QUERY_STRING} transport=websocket    [NC]
RewriteRule /(.*)           ws://localhost:8000/$1 [P,L]

ProxyPass        /socket.io http://localhost:8000/socket.io
ProxyPassReverse /socket.io http://localhost:8000/socket.io

Също така се уверете, че необходимите модули са активирани

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_wstunnel_module modules/mod_proxy_wstunnel.so

След това ще трябва да стартирате сървъра node.js на порт 8000

http.listen(8000, function(){
  console.log('listening on *:8000');
}); 
person Till Arnold    schedule 11.06.2016
comment
Трябва ли просто да поставя директивата някъде в конфигурационния файл? и имам ли достъп до xampp нормално като localhost/foldername? - person Lester; 11.06.2016
comment
Правиш всичко нормално. Добавяте директивата навсякъде в httpd.conf. Добавих го в края на файла. - person Till Arnold; 11.06.2016
comment
Мога ли да ви дам пример? Направих всичко, което казахте и нищо не се промени (вероятно ми липсват познания за тези неща) - person Lester; 12.06.2016
comment
Моят apache/conf/httpd.conf е pastebin.com/ruihe9GR. Вероятно не можете да копирате целия файл поради абсолютните пътища там. Моят main.js файл е този pastebin.com/CTfgNJmS. Пускам го с node main.js. Моят index.php файл е pastebin.com/YWh7haPF. Имам този файл в htdocs/php-test/index.php. Влизам в примера в моя браузър под http://localhost/php-test/. Използвам Windows версията на xampp под Windows 10. О, трябва да рестартирате apache след промяна на httpd.conf - person Till Arnold; 12.06.2016

Можете просто да направите това и няма нужда от http пренасочвания, отворете js от страна на клиента

var configUrl = 'http://localhost:3000';// currently my node js using this port
var socket = io(configUrl); 

и останалите неща работят гладко във вашата клиентска страна

socket.emit('chatMessage', ...
socket.on('chatMessage', ..
person Ishak Ali    schedule 07.12.2016

Можем да използваме клиентска библиотека scoket.io, така че можем да използваме JavaScript като клиент и node.js като сървър.

Моля, разгледайте примера по-долу:

index.html(клиент)

<!DOCTYPE html>
<html>
<head>
  <title>Hello world</title>
  <script src="https://cdn.socket.io/4.0.1/socket.io.js"></script>
</head>
<body>
  <script>
    var socket = io('http://localhost:5000');
  </script>
</body>
</html>

app.js (Node.js сървър)

var io=require('socket.io')(5000,{
  cors:{
    origin: "http://localhost",
  },
});


//Whenever someone connects this gets executed
io.on('connection',socket => {
 console.log('A user connected');
});
person Parag Jain    schedule 13.07.2021