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


How to connect Node.js server to Apache server?

我想使用Socket.io和Node.js来做推送通知。最终目标是做一些类似于Stackoverflow对他们的评论所做的事情,以通知人们新的评论。

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

  1. 将Node放在与Apache相同的实例上,并代理这两台服务器
  2. 将节点放在单独的实例上

无论哪种情况,我都不知道这两个服务器之间的连接在编程上看起来如何。例如,当WebSockets/Node处理消息的发送/接收时,我需要将这些消息存储在MySQL数据库中,这需要一些PHP代码,是/否?另外,在我的PHP页面上是如何接收消息的?通过$.post到这样的url,http://mysite/receiver.php会由我的Apache服务器解析吗?

我很乐意看到评论或代码来帮助我更好地理解这一点。

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

--已编辑
关于如何在节点http代理旁边使用vhosts的一些附加信息 Timothy Strimple在评论中提供的链接,感谢

在这个问题中可以找到一些MySQL驱动程序node.js有哪些MySQL驱动程序

关于配置端口:
-在apache上,您需要手动编辑httpd.conf来定义默认端口
-在node.js上,事情更简单,您可以在代码中定义端口使用node.js作为一个简单的web服务器

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

希望它能帮助

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

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

您可以在同一台服务器上运行Node和Apache,并使用NGINX在两者之间进行代理,也可以使用Node代理到您的Apache。但不要使用Apache代理到Node,因为这样会损害性能。

以下是一些有望有所帮助的链接:

  • Express web框架
  • 节点mysql
  • NGINX proxy_pass-在端口80上运行NGINX,在具有不同端口的localhost上运行apache和node,使用NGINX在它们之间路由

您还可以使用套接字作为两者之间的直接通信方式使用node.js的net模块和php的socket模块。下面是一个例子。

监听连接的简单节点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如何将php连接到节点js