读书人

nowjs跟nodejs结合的简单示例

发布时间: 2012-09-22 21:54:54 作者: rapoo

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 8080nowjs = require 'now'everyone = nowjs.initialize servertimerid ={}#用于保存setInterval返回值everyone.now.update = ->  timerid[@user.clientId]= setInterval => #回调函数,要保存原this,用=>声明函数      @now.updateMe(new Date().getTime())  ,@now.intervaleveryone.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>

读书人网 >JavaScript

热点推荐