如何将Node.js服务器连接到Apache服务器?

时间:2012-07-24 15:29:08

标签: php javascript apache node.js websocket

我想使用Socket.ioNode.js来做推送通知。最终目标是执行类似于Stackoverflow对其评论所做的事情,以通知人们新的评论。

我的网站使用PHP并在EC2实例上运行Apache。我听说Apache不能很好地处理并发性,所以我有兴趣使用Node来处理希望大量的同时持久连接。我想有两种解决方案:

  1. 将Node放在与Apache相同的实例上并代理两台服务器
  2. 将Node放在单独的实例上
  3. 在任何一种情况下,我都不知道这两个服务器之间的连接是如何以编程方式进行的。例如,当WebSockets / Node处理消息的发送/接收时,我需要将这些消息存储在我的MySQL数据库中,这需要一些PHP代码,是/否?另外,我的PHP页面上的消息是如何收到的?通过$.post到这样的网址,http://mysite/receiver.php将由我的Apache服务器解析?

    我很高兴看到任何评论或代码可以帮助我更好地理解这一点。

3 个答案:

答案 0 :(得分:4)

  • 您可以在不同的端口运行不同的服务器。
  • 为了让服务器以某种方式进行通信,您可以使用Sessions / MySQL / flat files / Cache / json / xml ...
  • 你可以在任何你想要的地方存储消息,没有限制,node.js的MySQL模块存在,node.js的memcache模块存在,还有更多,PHP代码不是必需的,它的可选择查询数据库。
  • PHP页面上的消息从数据库中获取并呈现,如果node.js在mysql服务器中存储内容,您可以使用PHP获取它们或临时存储到数组并在存储到数据库时将消息推送回客户端新用户拥有“当前”内容。
  • 避免使用ajax,因为您可以在需要时通过websockets将数据流式传输到客户端。

- 已编辑
有关How to use vhosts alongside node-http-proxy? 链接的一些其他信息,请参阅Timothy Strimple的评论,谢谢

在这个问题What MySQL drivers are available for node.js?中可以找到一些MySQL驱动程序  
关于配置端口:
- 在apache上你需要手动编辑httpd.conf来定义默认端口
- 在node.js上事情更简单,你可以在代码中定义一个端口  Using node.js as a simple web server

   var connect = require('connect');
    connect.createServer(
     // .. code
    ).listen(PORT);

希望它有所帮助

答案 1 :(得分:2)

  

我需要将这些消息存储在我的MySQL数据库中,这需要一些PHP代码,是/否?

没有。 Node允许你在服务器上编写javavscript,你可以用PHP做任何事情,包括连接到MySQL数据库。

您可以在同一台服务器上运行Node和Apache,并使用NGINX在两者之间进行代理,或者您可以使用Node代理Apache。但是,不要使用Apache代理节点,因为你会损害性能。

以下是一些希望有用的链接:

答案 2 :(得分:0)

您也可以使用套接字作为两者之间的直接通信方式 使用node.js的网络模块和php的套接字模块。这是一个例子。

简单节点js服务器侦听连接

var net = require('net');

var listenport = 3000; // Should be the same as in the php script

// Set up server
var Server = net.createServer(function(Sock) {
    console.log('Client Connected.');

    Sock.on('data', function(data) {
       console.log('Data received: ' + data);

       dataobj = JSON.parse(data);

       console.log('Item ID: ' + dataobj.itemid);

       // and so on
    });

    Sock.on('end', function() {
        console.log('Client Disconnected.');
    });

    Sock.pipe(Sock);
});

Server.listen(listenport, function() {
   console.log('Listening on port ' + listenport); 
});

简单PHP连接到节点实例

<?php
error_reporting(E_ALL);

$port = 3000; // Port the node app listens to
$address = '127.0.0.1'; // IP the node app is on

// Create socket
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false) {
    echo "socket_create() failed: reason: " . socket_strerror(socket_last_error()) . "\n";
}

// Connect to node app
$result = socket_connect($socket, $address, $port);
if ($result === false) {
    echo "socket_connect() failed.\nReason: ($result) " . socket_strerror(socket_last_error($socket)) . "\n";
}

// Data we want to send
$data = array('itemid' => '1234567', 'steamid' => '769591951959', 'otherinfo' => 'hi there');

// Prepares to transmit it
$encdata = json_encode($data);

socket_write($socket, $encdata, strlen($encdata));

socket_close($socket);

echo 'Sent data\n';

?>

原始来源:github how to connect php to node js