如何在代码点火器中集成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 .
这怎么可能?
答案 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
var socket = io.connect('http://localhost:8000');
但是,这样您就可以在codeigniter视图中执行所有客户端代码。如果要使用nodejs模板引擎将html页面发送到浏览器,则可以将node.js服务器端口更改为80.