node.js läuft neben Apache PHP?

Lesezeit: 6 Minuten

Ich versuche, meinen Kopf um node.js zu bekommen …

Ich bin sehr zufrieden mit meinem LAMP-Setup, da es derzeit meine Anforderungen erfüllt. Obwohl ich meiner PHP-App einige Echtzeitfunktionen hinzufügen möchte. Beispielsweise das Anzeigen aller Benutzer, die derzeit auf meiner Website angemeldet sind, und möglicher Chat-Funktionen.

Ich möchte mein PHP-Backend nicht ersetzen, aber ich möchte skalierbare Echtzeitlösungen.

1. Kann ich node.js in den Mix werfen, um meine Anforderungen zu erfüllen, ohne das gesamte serverseitige Skript der Anwendung neu zu erstellen?

2. Wie könnte node.js meine „Chat“- und „Aktuell eingeloggt“-Funktionen am besten bedienen?

Schön, Ihre Ansichten zu hören!

W.

Benutzer-Avatar
Bausatz

Ich schlage vor, dass Sie Socket.io zusammen mit node.js verwenden. Installieren und laden Sie die Bibliotheken von herunter http://socket.io/. Sie können es problemlos neben Ihrem Apache-Server ausführen.

Erstellen Sie zuerst einen Node-Server:

var http = require('http')
  , url = require('url')
  , fs = require('fs')
  , io = require('../')//path to your socket.io lib
  , sys = require(process.binding('natives').util ? 'util' : 'sys')
  , server;

server = http.createServer(function(req, res){
  var path = url.parse(req.url).pathname;
}),

server.listen(8084);//This could be almost any port number

Führen Sie zweitens Ihren Server von der Befehlszeile aus mit:

node /path/to/your/server.js

Stellen Sie drittens eine Verbindung zum Socket mit clientseitigem js her:

var socket = new io.Socket(null, {port: 8084, rememberTransport: false});
socket.connect();

Sie müssen auch die Socket.io-Lib-Clientseite einbeziehen.

Senden Sie Daten von der Clientseite an den Knotenserver mit:

socket.send({data:data});

Ihre server.js sollte auch Funktionen zum Verarbeiten von Anfragen haben:

io.on('connection', function(client){
//action when client connets

 client.on('message', function(message){
    //action when client sends msg
  });

  client.on('disconnect', function(){
    //action when client disconnects
  });
});

Es gibt zwei Möglichkeiten, Daten vom Server an den Client zu senden:

client.send({ data: data});//sends it back to the client making the request

und

client.broadcast({  data: data});//sends it too every client connected to the server

  • Hallo @Kit danke für diese tolle Antwort. Ich bin immer noch ein wenig verwirrt über die Verbindung zum Apache-Teil. Würde es Ihnen etwas ausmachen, Ihrer Antwort einige Kommentare/Code hinzuzufügen, um den Apache-Teil klarer zu machen?

    – Tim Petersen

    21. Juli 2012 um 18:30 Uhr

  • Was ist mit der Richtlinie zur gleichen Herkunft? Sie können mit Socket io keine Anrufe an einen anderen Port tätigen, oder?

    – Zaptree

    8. August 2012 um 17:50 Uhr

  • Danke hat sehr geholfen beim Einstieg

    – Luftig

    27. Januar 2014 um 15:34 Uhr

  • @KitCarrau wenn wir eine PHP-Erweiterungsdatei haben, zB -> index.php dann brauchen wir Apache, um es auszuführen und gleichzeitig, wenn wir unsere socket.io laden müssen <script> auf Clientseite -> index.php unsere zu aktivieren node.js und socket.io Feature, das es nicht funktioniert. Ein Grund ist port wo wir Apache und nodejs nicht verwenden können port no. gleich

    – SOuřaan Gřg

    23. Dezember 2015 um 17:12 Uhr

  • und wenn wir für diese beiden separaten Server unterschiedliche Ports verwenden möchten apache und nodejs wie können wir dann unsere zusammen laufen lassen php und nodejs ??

    – SOuřaan Gřg

    23. Dezember 2015 um 17:14 Uhr


Ich vermute, dass sowohl der Chat als auch das eingeloggte Verzeichnis über Ajax funktionieren würden.

Der Chat-Teil wäre ziemlich einfach in Node.js zu programmieren, verwenden Sie einen der MySQL-Module Damit Node eine Verbindung zu Ihrer vorhandenen Datenbank herstellt und Anmeldeinformationen und dergleichen abfragt und dann den gesamten eigentlichen Chat über Node.js durchführt, empfehle ich Ihnen, es auszuprobieren Socket.io Da es die Kommunikation zwischen Browser und Node.js wirklich trivial macht, sollten Sie sich auf die eigentliche Chat-Logik konzentrieren können.

Sie können auch einen Blick auf die “offiziellen” Chat-Demo von Node.js, für etwas Inspiration.

Was den aktuellen Online-Teil angeht, ist dies nie einfach zu implementieren, da Sie nur etwas in der Art von “5 Benutzer aktiv in den letzten X Minuten” anzeigen können.

Natürlich könnten Sie leicht etwas Ajax hinzufügen, das den Chat-Server abfragt und die Benutzerliste davon auf der Homepage anzeigt.

Oder Sie sind völlig verrückt und bauen für jeden Besucher eine Socket.io-Verbindung auf und überwachen sie so, obwohl fraglich ist, ob sich der Aufwand lohnt.

  • Wäre er nicht gezwungen, den node.js-Server auf einem anderen Port auszuführen, da Port 80 bereits von Apache verwendet wird, oder ihn an eine andere IP binden? Er würde dann auf domänenübergreifende Probleme stoßen, wenn er jemals mit dem Chat-Server und seiner aktuellen Web-App kommunizieren wollte. Ich könnte mich irren, aber ich glaube, das war im Wesentlichen seine Frage.

    – Christian Joudrey

    9. Januar 2011 um 22:11 Uhr

  • Hängt davon ab, er sollte in der Lage sein, es durchzugeben, ohne dass sich die URL ändert: arguments.callee.info/2010/04/20/…

    – Ivo Wetzel

    9. Januar 2011 um 22:31 Uhr

  • Interessanter Fund. Einer der Kommentare zu diesem Beitrag schlägt vor, das Gegenteil zu tun. Das heißt, dass node.js das Proxying an Apache durchführt, anstatt umgekehrt. Wenn Sie Apache als Proxy für node.js verwenden, erzeugt Apache bei jeder Anfrage einen neuen Prozess und leitet ihn an node.js weiter.

    – Christian Joudrey

    10. Januar 2011 um 4:18 Uhr

Was ist mit der Verwendung einer Socket-Datei, genau wie Pedro es mit ngnx getan hat?
http://nodetuts.com/tutorials/25-nginx-and-nodejs.html

Sie können php von node js mit node-php ausführen: https://github.com/mkschreder/siteboot_php

Ich betreibe neben meinem LAMP-Setup einen wss-Server (secure websocket).

Node.js kann problemlos neben jedem anderen gewünschten Webserver (Apache) ausgeführt werden. Im Beispiel von @KitCarrau lässt er den Knoten auf Port 8084 laufen – dort läuft und hört er, nicht 80 oder 443 usw. (diese werden normalerweise sowieso von Apache übernommen). Aber Sie können immer noch denselben Port verwenden, um auch http/https zu bedienen (in meinem Fall geben Sie nur einige conf und allgemeine Informationen an, dass der Dienst aktiv ist).

Das Starten von der Konsole aus ist nicht der beste Weg (aus der Ferne stoppt der Knoten beim Schließen der Konsole). Ich empfehle einen Blick auf Knoten als Dienst ausführen

Einfach zu verfolgendes Protokoll in Echtzeit (Protokoll mit console.log(“hello”); in Ihrer Anwendung) mit:

tail -f /var/.../SocketServer.log

Beispielskript (node-server.conf):

author ....    
description "node.js server"    
# used to be: start on startup
# until we found some mounts weren't ready yet while booting:

start on started mountall
stop on shutdown

# Automatically Respawn:
respawn
respawn limit 99 5

# Max open files are @ 1024 by default. Bit few.
limit nofile 32768 32768

script
    # Not sure why $HOME is needed, but we found that it is:
    export HOME="/root"

    exec node /var/.../SocketServer.js >> /var/www/node/.../SocketServer.log 2>&1
end script

post-start script
   # Optionally put a script here that will notifiy you node has (re)started
   # /root/bin/hoptoad.sh "node.js has started!"
   echo "\n*********\nServer started\n$(date)\n*********" >> /var/.../SocketServer.log

end script

1158140cookie-checknode.js läuft neben Apache PHP?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy