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

如何在代码点火器中集成节点.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 的我的视图文件在,但 nodejs 使用 侦听 port。那么我该如何连接.喜欢localhost/myprojectlocalhost:8000socket IO

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

这怎么可能?


答案 1

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

您引用的答案中的关键点:

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

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

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


答案 2

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

我最近写了一篇关于这个LinkedIn帖子

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();