nowjs和nodejs结合的简单示例

功能:把服务器端的时间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>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值