我正在尝试通过node.js将一些syslog数据流式传输到Meteor集合中.它工作正常,但Meteor客户端轮询周期〜10秒对于我的口味来说太长了一个周期 - 我希望它是~1秒.
通过控制台插入客户端集合非常快,所有客户端都可以立即更新,因为它使用的是DDP.但是来自服务器端的直接MongoDB插入受客户端的轮询周期的影响.
所以看来现在我已经降级为使用DDP从我的节点守护进程插入更新.
在DDP-client包例子,我能看到我已经订阅了邮件,但我看不出实际发送新的经DDP和node.js的消息到流星的收集,从而更新的所有客户端立刻...
任何例子或指导?我非常感谢 - 作为节点和流星的新手,我很快就达到了极限.
全部:我正在寻求输入/指导/设计思路.我的目标是找到一种精简但可靠的方法来从HTTP POST获取XML有效负载(这部分没有问题),解析它,并异步生成一个相对长期的进程.
产生的进程是CPU密集型的,将持续大约三分钟.我一开始并不期望有太大的负载,但我确实有可能需要在服务器上横向扩展,因为流量有望增加.
我非常喜欢这种用途的Celery/Django堆栈:它非常直观,并且具有完全满足我需要的所有内置框架.我热情地开始了这条道路,但我很快发现我的512MB RAM小云服务器只有100MB的可用内存,我开始意识到,一旦我的所有进程全速运行,我就会遇到麻烦.此外,还有几个移动部件:RabbitMQ,MySQL,cerleryd,ligthttpd和django容器.
我绝对可以增加服务器的大小,但我希望在这个项目的早期阶段将成本降到最低.
作为替代方案,我正在考虑使用twisted进行流程管理,以及远程系统的透视代理,如果需要的话.但至少对我来说,虽然扭曲是辉煌的,但我觉得我正在注册这条道路:写协议,回调管理,跟踪工作状态等等.这里的好处非常明显 - 卓越的性能,更少的移动部件和更小的内存占用(注意:我需要验证内存部分).我对此严重偏向于Python - 对我而言比其他选择更令人愉快:)
我非常感谢对此的任何看法.我担心在错误的轨道上开始工作,稍后用生产流量重做这将是痛苦的.
-Matt
这是我的场景,Meteor的第一个项目:我在MongoDB文档中嵌入了JSON字符串化数据,您可以在下面的MESSAGE键中看到:
{ "DATE" : "Jan 24 23:28:14",
"MESSAGE" : **"{\"status_code\":200,\"uri\":\"172.16.156.143/content/dynamic\",\"tprocess\":3}"**,
"_id" : ObjectId("5101c3992a1624e726000014") }
Run Code Online (Sandbox Code Playgroud)
在Meteor中,我的客户端模板代码类似于以下基本模式:
Template.log.logEntry = function () {
return Messages.find({});
};
Run Code Online (Sandbox Code Playgroud)
...哪个有效,但它显然会呈现以下模板......
<template name="log">
<h1>Log Entries Are:</h1>
{{#each logEntry}}
<div> : {{MESSAGE}} </div>
{{/each}}
</template>
Run Code Online (Sandbox Code Playgroud)
...例如,在浏览器中使用未解析的文字字符串
{"status_code":200,"uri":"172.16.156.143/static/style.css","tprocess":2}
Run Code Online (Sandbox Code Playgroud)
我喜欢JSON.parse()这个字符串并做更多有趣的事情,但我不确定如何最好地从我的Meteor项目的JavaScript文件中的isClient上下文中做到这一点.