集成节点js和套接字IO与codeigniter

如何将node.js和套接字IO集成到代码点火器中。

<script> // create a new websocket var socket = io.connect('http://localhost:8000'); // on message received we print all the data inside the #container div socket.on('notification', function (data) { var usersList = "<dl>"; $.each(data.users,function(index,user){ usersList += "<dt>" + user.user_name + "</dt>\n" + "<dd>" + user.user_description + "\n" + "<figure> <img class='img-polaroid' width='50px' src='" + user.user_img + "' /></figure>" "</dd>"; }); usersList += "</dl>"; $('#container').html(usersList); $('time').html('Last Update:' + data.time); }); </script> 

正如在这个SO问题中提到的。 我使用codeigniter的视图文件位于localhost/myproject但nodejs使用localhost:8000监听端口。 那么我怎样才能连接socket IO 。 喜欢

  var socket = io.connect('http://localhost:8000'); //here I need to make socket IO listen to localhost/myproject instead of localhost:8000 . 

这怎么可能?

我想你误解了socket.io是如何工作的。 你永远不会听你的CI观点。 您将始终在端口8000上向NodeJS服务器发送消息(并从中接收消息)。Codeigniter的视图只是静态的,没有任何理由“倾听”它,因为它只会加载一次。

你引用的答案的关键点是 :

用户将使用codeigniter的URL,当打开页面,我有我的configuration文件查看页面上连接到我的Nodejs应用程序的脚本

因此,使用CI视图加载浏览器,然后通过CI视图中的JavaScript监听来自NodeJS服务器的事件。

然后,您也可以从CI视图中的JavaScript将事件推送到NodeJS服务器。

使用Dnode,它是node.js的一个asynchronousRPC系统,可以直接与php进行通信(反之亦然)(可以在您的codeigniter控制器上调用php端)

我最近写了一篇关于这个post的linkedinpost

https://www.linkedin.com/pulse/make-php-nodejs-talk-each-other-serdar-senay

在由其创build者为dnode编写的教程中,有一些陈旧的代码,因此请使用我的linkedinpost中的代码示例,也将其放在下面(使用比linkedin更好的格式):

 require ('vendor/autoload.php'); $loop = new React\EventLoop\StreamSelectLoop(); // Connect to DNode server running in port 7070 and call argument with Zing 33 $dnode = new DNode\DNode ($loop); $dnode-> connect (7070, function ($remote, $connection) { // Remote is A That Provides Proxy object Methods us all from the Server $remote-> zing(33, function ($n) Use ($connection) { echo "n = {$n}\n"; // Once We Have the Result We Can close the connection $connection->end(); }); }); $loop-> Run(); 

以下是您要实现的stream程:

1)使用socket.io套接字(.on)进行node.js服务器设置。 如果你想让node.js在套接字80上工作,请考虑让iptables将端口80转发到端口3000。

2)将socket.io客户端添加到代码点火器项目。 你将使用这个来初始化连接到CI视图中的node.js / socket.io连接。

3)在View中设置不同的事件,以触发发送到服务器,以及接收套接字消息时会发生什么。 即:点击一个button来添加一个项目到页面,它会发送到服务器,然后你可能会让客户端收到来自服务器的消息,并更新视图,使其当前。

你可以在codeigniter视图中直接链接socket.io.js。

 <script type='text/javascript' src='http://localhost:8000/socket.io/socket.io.js'></script> 

那么你将能够从http://localhost/myproject连接到nodejs服务器

  var socket = io.connect('http://localhost:8000'); 

但是,这样您将在codeigniter视图中执行您的所有客户端代码。 如果您想使用nodejs模板引擎将html页面发送到浏览器,那么您可以将您的node.js服务器端口更改为80。