我正试图让我的头围绕node.js ......
我对我的LAMP设置非常满意,因为它目前符合我的要求。虽然我想在我的PHP应用程序中添加一些实时功能。例如显示当前登录我网站的所有用户以及可能的聊天功能。
我不想替换我的PHP后端,但我确实需要可扩展的实时解决方案。
1。我可以将node.js放入混合中以满足我的需求,而无需重建整个应用程序服务器端脚本吗?
2。 node.js如何最好地为我的“聊天”和“当前登录”功能提供服务?
很高兴听到您的意见!
W上。
答案 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