Я пытаюсь получить мою голову вокруг node.js …
Я очень доволен своей настройкой LAMP, поскольку она в настоящее время удовлетворяет моим требованиям. Хотя я хочу добавить некоторые функции реального времени в свое приложение PHP. Например, показ всех пользователей, которые вошли в мой сайт и возможности чата.
Я не хочу заменять свой PHP-сервер, но мне нужны масштабируемые решения в режиме реального времени.
1. Могу ли я загрузить node.js в микс, чтобы удовлетворить мои потребности, не перестраивая весь сценарий на стороне сервера приложений?
2. Как наилучшим образом мог node.js обслуживать мои функции «chat» и «now logged»?
Здорово слышать ваши взгляды!
W.
Я предлагаю вам использовать 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});
У вашего сервера.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
Я подозреваю, что чат, а также зарегистрированный листинг будет работать через Ajax.
Часть чата будет довольно проста для программирования в Node.js, используйте один из модулей mysql для узла, чтобы подключиться к существующей базе данных и запросить информацию для входа в систему и т. Д., А затем выполнить все фактические беседы через Node.js, я рекомендую вам проверьте Socket.io, поскольку он делает обход браузера / Node.js действительно тривиальным, это должно позволить вам сосредоточиться на фактической логике чата.
Кроме того, вы можете взглянуть на «официальную» демонстрацию чата Node.js, для некоторого вдохновения.
Что касается текущей онлайн-части, это никогда не бывает легко реализовать, поскольку все, что вы можете сделать, это отобразить что-то в строках «5 пользователей, активных за последние X минут».
Конечно, вы можете легко добавить Ajax, который запрашивает сервер чата и отображает список пользователей, который находится на главной странице.
Или вы совершенно сумасшедшие и устанавливаете соединение Socket.io для каждого посетителя и контролируете его таким образом, хотя сомнительно, стоит ли это усилий.
Как насчет использования файла сокета, так же как и pedro с ngnx? http://nodetuts.com/tutorials/25-nginx-and-nodejs.html
Вы можете запустить php из узла js с помощью node-php: https://github.com/mkschreder/siteboot_php
Я запускаю сервер wss (secure websocket) вместе с настройкой LAMP.
Node.js может легко запускаться вместе с любым другим веб-сервером (apache), который вы хотите. В примере @KitCarrau он позволяет узлу запускаться на порт 8084 – там он работает и слушает, а не 80 или 443 и т. Д. (Обычно это делают apache). Но вы все равно можете использовать один и тот же порт, чтобы также обслуживать http / https (в моем случае просто указывается какая-то conf и общая информация о том, что служба включена).
Начиная с консоли не лучший способ (удаленно, узел останавливается при закрытии консоли). Я рекомендую взглянуть на Running node как на сервис
Легко отслеживать журнал в реальном времени (log with 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