node.js работает вместе с Apache PHP? - PullRequest
31 голосов
/ 09 января 2011

Я пытаюсь разобраться с темой node.js ...

Я очень доволен настройкой LAMP, поскольку в настоящее время она соответствует моим требованиям.Хотя я хочу добавить некоторые функции реального времени в мое приложение PHP.Например, отображение всех пользователей, вошедших в данный момент на моем сайте, и возможных функций чата.

Я не хочу заменять свой бэкэнд PHP, но мне нужны масштабируемые решения в реальном времени.* 1.Могу ли я добавить в узел файл node.js для удовлетворения моих потребностей, не перестраивая весь серверный скрипт приложения?

2.Как лучше всего использовать node.js для моего «чата» и «тех, кто в данный момент вошел в систему»?

Рад слышать ваши мнения!

Ответы [ 5 ]

23 голосов
/ 16 февраля 2011

Я предлагаю вам использовать Socket.io вдоль side node.js. Установите и загрузите библиотеки с http://socket.io/. Вы можете без проблем запустить его на сервере Apache.

Сначала создайте сервер узла:

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

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

node /path/to/your/server.js

В-третьих, подключитесь к сокету, используя клиентскую сторону js:

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

Вы должны будете также включить клиентскую часть socket.io lib.

Отправка данных со стороны клиента на сервер узла с помощью:

socket.send({data:data});

Ваш server.js также должен иметь функции для обработки запросов:

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
  });
});

Существует два основных способа отправки данных с сервера на клиент:

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

и

client.broadcast({  data: data});//sends it too every client connected to the server
2 голосов
/ 10 января 2011

Я подозреваю, что чат и вход в систему будут работать через Ajax.

Часть чата будет довольно легко программировать в Node.js, используйте один из модулей mysql для Node, чтобы подключиться к вашей существующей базе данных и запросить информацию для входа в систему и т. Д., А затем выполнить весь реальный чат через Node.js я рекомендую вам проверить Socket.io , поскольку это делает общение Browser / Node.js действительно тривиальным, это должно позволить вам сосредоточиться на реальной логике чата.

Кроме того, вы можете взглянуть на "официальную" чат-демонстрацию Node.js, чтобы почерпнуть вдохновение.

Что касается текущей онлайновой части, ее нелегко реализовать, поскольку все, что вы можете сделать, это отобразить что-то вроде «5 активных пользователей за последние X минут».

Конечно, вы можете легко добавить Ajax, который запрашивает сервер чата, и отобразить список пользователей из него на домашней странице.

Или вы просто сошли с ума и устанавливаете соединение Socket.io для каждого посетителя и отслеживаете его таким образом, хотя сомнительно, стоит ли это усилий.

1 голос
/ 15 августа 2011

Как насчет использования файла сокета так же, как Педро сделал с Ngnx? http://nodetuts.com/tutorials/25-nginx-and-nodejs.html

0 голосов
/ 11 ноября 2014

Я использую сервер wss (безопасный веб-сокет) вместе с настройкой LAMP.

Node.js может легко работать вместе с любым другим веб-сервером (apache), который вы хотите. В примере @KitCarrau он позволяет узлу работать на порте 8084 - именно там он работает и слушает, а не на 80 или 443 и т. Д. (Они обычно принимаются Apache в любом случае). Но вы все равно можете использовать тот же порт для обслуживания http / https (в моем случае просто указать некоторую информацию по conf и общую информацию о том, что служба работает).

Запуск с консоли не лучший способ (удаленно, узел останавливается при закрытии консоли). Я рекомендую взглянуть на Работающий узел в качестве службы

Легко отслеживать журнал в режиме реального времени (войти с console.log ("привет"); в вашем приложении) с помощью:

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

Пример сценария (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
0 голосов
/ 27 января 2014

Вы можете запустить php с узла js, используя node-php: https://github.com/mkschreder/siteboot_php

...