使用codeigniter集成节点js和套接字IO

时间:2015-04-09 08:14:50

标签: javascript php node.js codeigniter socket.io

如何在代码点火器中集成node.js和socket 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>

正如本问题here所述。我的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 .

这怎么可能?

4 个答案:

答案 0 :(得分:3)

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

that answer you referenced的关键点:

  

用户将使用codeigniter URL,当打开页面时,我在我的CI视图页面上有这个脚本连接到我的Nodejs应用程序

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

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

答案 1 :(得分:3)

使用Dnode,它是node.js的异步RPC系统,它使它直接与php(反之亦然)对话(你可以在你的codeigniter控制器上调用php端)

我最近写了一篇关于这个

的邮件

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

在由其创始人为dnode编写的教程中有一些陈旧的代码,所以在我的linkedin帖子中使用代码示例,也在下面转储(格式比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();

答案 2 :(得分:1)

以下是您想要实现的流程:

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

2)将socket.io客户端添加到代码点火器项目中。您将使用它来在CI视图中建立与node.js / socket.io连接的初始连接。

3)在View中设置不同的事件,触发向服务器的发射以及接收套接字消息时应该发生的事情。即:单击按钮将项目添加到页面,它将发送到服务器,然后您可能让客户端从服务器接收消息并更新视图以使其当前。

答案 3 :(得分:1)

您可以在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.