Node.js работает вместе с Apache PHP?

Я пытаюсь развернуть node.js...

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

Я не хочу заменять свой PHP-сервер, но мне нужны масштабируемые решения в режиме реального времени.

1. Могу ли я переместить node.js в микс, чтобы удовлетворить мои потребности, не перестраивая всю серверную часть приложения script?

2. Как лучше всего node.js обслуживать мои функции "chat" и "в настоящее время вошедшие"?

Отлично слышать ваши взгляды!

Ш.

Ответ 1

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

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

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.

Отправлять данные с клиентской стороны на сервер node, используя:

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

Я подозреваю, что чат, а также зарегистрированный листинг будет работать через Ajax.

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

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

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

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

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

Ответ 5

Я запускаю сервер wss (secure websocket) рядом с настройкой LAMP.

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

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

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

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

Пример script (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