node.js和Apache PHP一起运行?

时间:2011-01-09 20:39:53

标签: php apache node.js server-side serverside-javascript

我正试图让我的头围绕node.js ......

我对我的LAMP设置非常满意,因为它目前符合我的要求。虽然我想在我的PHP应用程序中添加一些实时功能。例如显示当前登录我网站的所有用户以及可能的聊天功能。

我不想替换我的PHP后端,但我确实需要可扩展的实时解决方案。

1。我可以将node.js放入混合中以满足我的需求,而无需重建整个应用程序服务器端脚本吗?

2。 node.js如何最好地为我的“聊天”和“当前登录”功能提供服务?

很高兴听到您的意见!

W上。

5 个答案:

答案 0 :(得分:23)

我建议你在side node.js上使用Socket.io。从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

答案 1 :(得分:2)

我怀疑聊天以及登录的列表都可以通过Ajax工作。

聊天部分很容易在Node.js中编程,使用mysql modules之一用于Node连接到现有数据库并查询登录信息等,然后通过Node进行所有实际聊天。 js,我建议你查看Socket.io因为它使Browser / Node.js通信变得非常简单,这应该让你专注于实际的聊天逻辑。

另外,您可以查看Node.js的“官方”chat demo,获取一些灵感。

就目前的在线部分而言,这绝不容易实现,因为您所能做的就是显示“最后X分钟内活跃的5个用户”的内容。

当然,您可以轻松添加一些查询聊天服务器的Ajax,并显示主页上的用户列表。

或者你完全疯了并为每个访问者建立一个Socket.io连接并以这种方式进行监控,尽管这是否值得努力是值得怀疑的。

答案 2 :(得分:1)

使用套接字文件怎么样? 就像pedro和nginx一样? {{3P>

答案 3 :(得分:0)

您可以使用node-php:https://github.com/mkschreder/siteboot_php

从节点js运行php

答案 4 :(得分:0)

我正在运行一个wss(安全websocket)服务器和我的LAMP设置。

Node.js可以轻松地与您想要的任何其他Web服务器(apache)一起运行。在@KitCarrau示例中,他让节点在端口8084上运行 - 这是它正在运行和收听的地方,而不是80或443等(这些通常由apache采用)。但你仍然可以使用相同的端口来提供http / https(在我的情况下,只是说明服务已启动的一些conf和一般信息)。

从控制台开始不是最佳方式(远程,关闭控制台时节点停止)。 我建议您查看 Running node as service

轻松实时跟踪日志(使用console.log(“hello”);在您的应用程序中)使用:

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