Node.js + codeigniter

最近一直在读Node.js,它是如何是一个伟大的networking服务器,甚至支持套接字。 我正在考虑在我的一个项目上使用它,但是我仍然无法想象从CI到node.js的交互。 有一个与Drupal完成的项目,它似乎工作得很好,但我仍然无法弄清楚它们是如何将它们集成在一起的。

只是想知道有没有人有这个想法的经验。

http://drupal.org/project/nodejs http://www.youtube.com/watch?v=UV8lbdJfESg 

例:

用户通过AJAX发表评论评论获取数据库中的所有用户收看线程获取通知

现在在提交评论和通知之后,msg如何被发送到node.js

node.js是一个可以用作Web服务器的非阻塞IO库。

Code Igniter是一个PHP框架。

你想在你的PHP Web服务器旁边运行一个node.js Web服务器并让它们相互通信吗?

我build议你做一个或另一个。 重新写你的整个网站快递和现在 。

如果他们必须互相交谈,则可以使用net轻松地在节点中打开TCP套接字。

 var net = require('net'); var server = net.createServer(function (socket) { socket.write("Echo server\r\n"); socket.pipe(socket); }) server.listen(8124, "127.0.0.1"); 

然后在PHP中使用fsockopen通过TCP套接字连接到节点。

编辑:

现场评论完全独立于CI。 你只需要在你的CI服务器页面上有一些socket.io javascript。 您的页面通过单独的套接字与node.js进行通信,并且不会触及PHP后端。 你的socket.io会将数据推送到你的所有客户端,页面将使用javascript呈现新消息。

所有codeigniter需要做的是插入

 <script src="url/socket-io.js" /> <script src="url/myChat.js" /> 

进一步编辑:

所以你需要你的用户login你的websocket。 我不知道他们现在如何login,但发送相同的用户名/密码哈希到node.js不应该太难。 获取node.js打开一个连接到你存储用户的数据库。 然后将某个特定用户的“频道/聊天室/消息”存储在数据库中。

然后,当节点收到来自“通道”的消息时,它只是向数据库询问哪些用户将该消息推送给该数据库,然后将其推送。

我回答了关于使用节点编写聊天服务器的类似问题 , 现在的video教程就有一个很好的例子。 你应该可以很容易地把“多个房间聊天”变成“多个线索评论”。

进一步编辑

不要发布到URL comment/add/当您点击添加。 不要使用ajax。 而是使用socket.io。

所以像这样:

 // on the client side $("#add").click(function() { socket.send("add" + user.toJSON()); }); socket.on("message", function(m) { if (/^new/.test(m)) { var post = m.substring(3); $("#comments").append($("<div></div>").text(post)); } }); // on the server side var socket = io.listen(server); socket.on('connection', function(client){ // new client is here! client.on('message', function(m){ if (/^add/.test(m)) { client.broadcast("new"+m.substring(3)); } }); }); 

所以,当你点击添加时,客户端发送一条“添加评论”消息。 服务器侦听添加消息并将消息广播给所有其他客户端。 这些客户端已经在听新的消息,新的附加评论。

我认为在CodeIgniter中使用node.js的一般情况下,两者之间没有直接的通信。

在上面描述的例子中,可以使用node.js中的“long polling”技术来实现。 (http://blog.nemikor.com/2010/05/21/long-polling-in-nodejs/&#xFF09;

本质上,您的客户端AJAX将向您的node.js服务器发出请求。 这个在node.js服务器上的请求将启动一个进程,每秒钟(或5秒等)检查你的数据库的新评论。 当它发现一个新的评论,它会返回作为对客户端JS AJAX调用的响应,你的JS会从那里处理它。

这是node.js和CodeIgniter可以结合的一种方法。

注:Node.js对于长轮询非常有用,因为可以通过node.js的非阻塞事件循环devise来维护来自一个node.js服务器的多个同时请求

Drupal的做法是使用Node.js插件Socket.io。 当发表评论时,drupal会通知套接字与评论详细信息,node.js然后通知其他“客户”。

我刚刚find这个包:

NodeigniterMVC – 受Codeigniter启发的node.js的MVC框架。 它允许自定义路由,链接和局部视图渲染; 内置辅助器,库和CLI。 与鲍尔完全兼容。

https://www.npmjs.com/package/nodeignitermvc

所以从我所不知道的,这是一个运行undedo.JS的包,如果你还没有开始你的项目,并希望他们都没有让你自己在服务器上使用套接字玩起来太麻烦 – 这看起来很理想。

也许这有助于:)