使用dynamic内容加载页面

我一直在为一些使用Bukkit的Minecraft服务器开发一个项目。 我试图创build一个包含服务器世界的dynamic映射的网页,以及一个实时事件更新系统,在服务器上发生事件时更新<div> 。 为了简要概述我的系统如何工作,Minecraft服务器通过UDP数据包在同一networking上与Node.jsnetworking服务器通信,Node.jsnetworking服务器使用这些数据包构build包含事件信息的JavaScript对象。 然后存储对象,并在请求页面时传递给Jade。 翡翠照顾模板。

我想要做的就是dynamic更新这个页面,这样用户就不必刷新整个页面来更新事件列表。 我试图实现的是类似于Facebook的代号,每次Facebook的朋友都会更新,如发布状态,评论post或“喜欢”post。

在阅读这个问题上 ,我已经得出结论,我需要在PHP脚本中使用长轮询,但我不知道如何将PHP与几乎完全在Node.js中编写的Web服务器集成。 我怎么能这样做?


编辑:
我在客户端代码中遇到了一个问题。

这是脚本块:

 script(src='/scripts/jadeTemplate.js') script(src='/socket.io/socket.io.js') script(type='text/javascript') var socket = io.connect(); socket.on('obj', function(obj) { var newsItem = document.createElement("item"); jade.render(newsItem, 'objTemplate', { object: obj }); $('#newsfeed').prepend(newsItem); console.log(obj); alert(obj); }); 

这是objTemplate.jade

 p #{object} // That's it. 

alert()console.log()被放置在脚本的顶部时,它会提醒和logging,但是在底部,它们不会执行(因此,我认为这是创buildnewsItemjade.render()或前置。

如果我需要提供更多的片段或文件,请告诉我。 我还在修补,所以我可以自己解决,但除非我更新,我仍然需要帮助。 🙂

我会跳过PHP,看看socket.io 。 它尽可能使用websockets,但在必要时会回退到long-polling,客户端库很容易使用。

只要你的node.js服务器有一个新的对象准备好,它就会把它推送到所有连接的浏览器。 使用ClientJade使用你的模板渲染对象(你可能必须将主模板的相关部分分解到它自己的文件中),然后将生成的dom元素添加到你的提要中。

首先,如果不是这样,你需要将你的玉石模板的相关部分分解成它自己的文件。 叫它objTemplate.jade。 然后使用ClientJade创build一个可以在浏览器中运行的编译模板: clientjade objTemplate.jade > jadeTemplate.js 。 把jadeTemplate.js放在你的公共js目录下。

在你的node.js应用程序中,你会有这样的东西(伪代码):

 var io = require('socket.io').listen(httpServer); listenForUDPPackets(function(obj) { saveObjSomewhere(obj); io.sockets.emit('obj', obj); }); 

然后在客户端上,像这样:

 <script src="/js/jadeTemplate.js"></script> <script src="/socket.io/socket.io.js"></script> <script> var socket = io.connect(); socket.on('obj', function(obj) { var newsItem = document.createElement(); jade.render(newsItem, 'objTemplate', obj); $('#newsFeed').prepend(newsItem); }); </script>