我想使用Socket.io和Node.js来做推送通知。最终目标是执行类似于Stackoverflow对其评论所做的事情,以通知人们新的评论。
我的网站使用PHP并在EC2实例上运行Apache。我听说Apache不能很好地处理并发性,所以我有兴趣使用Node来处理希望大量的同时持久连接。我想有两种解决方案:
在任何一种情况下,我都不知道这两个服务器之间的连接是如何以编程方式进行的。例如,当WebSockets / Node处理消息的发送/接收时,我需要将这些消息存储在我的MySQL数据库中,这需要一些PHP代码,是/否?另外,我的PHP页面上的消息是如何收到的?通过$.post
到这样的网址,http://mysite/receiver.php
将由我的Apache服务器解析?
我很高兴看到任何评论或代码可以帮助我更好地理解这一点。
答案 0 :(得分:4)
- 已编辑
有关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的套接字模块。这是一个例子。
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
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';
?>