设为首页 收藏本站
查看: 806|回复: 0

[经验分享] nowjs和nodejs结合的简单示例

[复制链接]

尚未签到

发表于 2017-2-22 08:09:04 | 显示全部楼层 |阅读模式
功能:把服务器端的时间new Date().getTime()传送到客户端,主要测试实时性。轮询间隔为10ms时,能正常显示。可同时打开多个窗口,设置不同轮询时间,各个窗口可独立运行。
服务器端代码:
用coffeescript编写
server.coffee
fs = require 'fs'
url = require 'url'
html = fs.readFileSync(__dirname + '/simple.html')
#注意,这里要指向你自己的jquery库地址
jquery = fs.readFileSync(__dirname + '/../node/jquery-1.2.6.min.js')
server = require('http').createServer((req, res)->
pathname = url.parse(req.url).pathname
res.end html if pathname == '/'
res.end jquery if pathname == '/jquery.js'
)
server.listen 8080
nowjs = require 'now'
everyone = nowjs.initialize server
timerid ={}#用于保存setInterval返回值
everyone.now.update = ->
timerid[@user.clientId]= setInterval => #回调函数,要保存原this,用=>声明函数
@now.updateMe(new Date().getTime())
,@now.interval
everyone.now.stop = ->
clearInterval(timerid[@user.clientId])
everyone.disconnected ->#当断开连接时删除相应的timerid
delete timerid[@user.clientId]

在测试时遇到了一个问题,开始是想用一个this.now.timerid来保存setInterval返回值,但在clearInterval时,始终停不下来。后来查看timers.js的原码,如下:
exports.clearInterval = function(timer) {
if (timer instanceof Timer) {
timer.ontimeout = null;
timer.close();
}
发现clearInterval()中首先判断参数是否为Timer类型。我怀疑问题就出在这里。在代码中加入查看this.now.timerid是否为Timer,结果为false。setInterval明明返回的是Timer,在这里怎会是false呢?
console.log this.now.timerid instanceof Timer #输出false
后来又做了个测试。
this.now.myvalue = new String 'a'
console.log this.now.myvalue instanceof String #输出false
也是返回false,我想now在内部是不是做了什么处理,现在还不清楚。不得已用一个外部变量来保存setInterval返回值了。
simple.html
<!DOCTYPE html>
<html lang="en">
<head>
<title>nowjs test</title>
<!-- 下面这两个引用不用动,服务器会处理好的 -->
<script type="text/javascript" src="/jquery.js"></script>
<script src="/nowjs/now.js"></script>
<script>
$(document).ready(function () {
$('#btnStop').attr({"disabled":"disabled"});
//now.ready(function(){//内建函数
//console.log('connect now ready.');
//});
$('#btnStart').click(function () {
now.interval = parseInt($('#txtInterval').val());
now.update();
$(this).attr({"disabled":"disabled"});
$('#btnStop').removeAttr("disabled");
});
$('#btnStop').click(function () {
now.stop();
$(this).attr({"disabled":"disabled"});
$('#btnStart').removeAttr("disabled");
});
$('#btnClean').click(function () {
$('#mess').text('');
});
now.update1 = function (val) {
$('#mess').append('<br>' + val);
}
});
</script>
</head>
<body>
<button id="btnStart">start</button>
interval:<input id="txtInterval" type="text" value='1000' size="4"/>ms
<button id="btnStop">stop</button>
<button id="btnClean">clean</button>
<div id="mess"/>
</body>
</html>

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-345409-1-1.html 上篇帖子: 关于nodeJs的并发内存消耗 下篇帖子: Underscore.js与nodejs相结合
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表