3

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

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

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

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

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

4

3 回答 3

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

--编辑
了一些关于如何在 node-http-proxy 旁边使用 vhosts 的附加信息? Timothy Strimple 在评论中提供的链接,谢谢

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

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

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

希望它有所帮助

于 2012-07-24T16:01:45.120 回答
2

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

不。Node 允许您在服务器上编写 javavscript,并且您可以使用它执行几乎所有使用 PHP 执行的操作,包括连接到 MySQL 数据库。

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

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

于 2012-07-24T15:51:06.060 回答
1

您还可以使用套接字作为两者之间的直接通信方式,使用 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连接到node js

于 2015-06-12T16:44:07.220 回答