`
biyeah
  • 浏览: 200542 次
  • 来自: ...
社区版块
存档分类
最新评论

NowJS and Reconnects

 
阅读更多
NowJS and Reconnects 保留
原文http://blog.nowjs.com/
This particular feature has been highly anticipated by the NowJS community for some time. With the switch to Socket.IO 0.6.18, which now has built-in support for socket reconnecting, implementation of this feature was actually quite doable. We've tested with both simulated server downtime and client network issues, and it's worked satisfactorily. Several minor changes were necessary to support this feature in Now -- nothing that actually affects the API for developers using this tool; just a few changes to how things work in the backend.
Several disclaimers to make about Now and the general state of reconnects: first of all, it's not possible to preserve the client's session ID without forking Socket.IO. I have it from one of the Socket.IO folks that 0.7 will make everything public, including generateSessionId(), so when we bridge over to that version (we'll have to make sure that nothing breaks -- we've been developing a test suite, so that should hopefully ease the transition), this may change.

Additionally, client groups are not preserved across reconnects. One way to handle this would be to have the client know which groups he's in, and then send this information when the socket's reconnect event is triggered.

Note that client scopes, however, are preserved, so in the multiroom chat example, for instance, a reconnecting user originally in room 3 will be treated as if he's in room 1, but he'll still have the same name.

And now, the code.

The first block of code, pulled from handleDisconnection(), is as follows:

// y-combinator trick
(function (y) { 
  y(now, y, [now]); 
})(function (obj, fn, seen) { 
  for (var i in obj) { 
    if (obj[i] && seen.indexOf(obj[i]) === -1 && 
        typeof obj[i] === 'object' && obj[i] != document) { 
      seen[seen.length] = obj[i]; 
      fn(obj[i], fn, seen); 
    } 
    else if (typeof obj[i] === 'function' && obj[i].remote) { 
      delete obj[i]; 
    } 
  } 
});

I've omitted the tiny portion from constructRemoteFunction() where I tagged all remote functions as such. Essentially, this snippet runs through the now object and deletes all remote functions -- if this is not done, then upon reconnecting, the user will find himself running into infinite recursion -- when re-establishing the connection, since the client transmits his scope first, the server-side function will be redefined to call the client-side function, which simply calls the server-side function.

About the actual code: I figured it would be amusing to use the y-combinator trick instead of conventional methods which involve binding values to variables, especially since Flotype (the company behind NowJS) is a YC-funded company. Plus, it's just an awesome concept.

The other snippet, pulled from handleNewConnection(), is both straightforward and standard:

if (client.handled) return;
client.handled = true;

Since the rest of the function involves attaching function listeners, this ensures that these listeners are only attached once.

Well, that's that. Let us know what you think in the comments below, and in our IRC channel #nowjs on irc.freenode.net
分享到:
评论

相关推荐

    three7-html5:HTML5Canvas 落块游戏的灵感来自 YuYu Hakusho 动漫中的类似游戏

    这个游戏可能类似于俄罗斯... 我在 2012 年 3 月使用limejs now nowjs 在几天内制作了这个游戏,但我决定发布代码,因为我非常喜欢这个游戏概念。 演示 。 请注意,由于它是作为 github 上的静态页面托管的,因此

    vimrc-builder:ⓥvimrc文件生成器

    通过Web应用程序轻松构建vimrc为什么构建vimrc文件应该并不困难。 毕竟,您要配置的代码编辑器是1991年发明的。 没关系,您的经验水平是不变的,总有新的方法可以改变vim的经验,但是由于提示分散在Internet上,因此...

    node-v8.15.0-linux-s390x.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    Java基础知识总结(超详细整理).txt

    Java基础知识总结(超详细整理)

    ISO IEC 27021-2017 信息技术.安全技术.信息安全管理系统专业人员的能力要求.pdf

    ISO IEC 27021-2017 信息技术.安全技术.信息安全管理系统专业人员的能力要求.pdf

    2024年中国DFB激光器芯片行业研究报告.docx

    2024年中国DFB激光器芯片行业研究报告

    公开整理-ESG视角下的多期DID构建数据集(2009-2022年).xlsx

    详细介绍及样例数据:https://blog.csdn.net/li514006030/article/details/138510939

    红帆OA(医疗版)漏洞细节未授权SQL注入请求注入数据包

    红帆OA(医疗版)是**一款专为医疗机构设计的办公自动化软件,旨在提高医院和相关卫生机构的工作效率和管理效能**。其功能特点包括: 1. **日常办公管理**:提供医院日常行政办公所需的基本功能,如文档处理、通知公告、会议管理等。 2. **科室管理**:支持医院内部各科室的管理需求,包括人员管理、资源分配、绩效考核等。 3. **信息集成**:能够整合医院内部的各类信息系统,实现数据共享和业务协同。 4. **多样化的医院类型支持**:适用于不同类型和规模的医院,如大学附属教学医院、综合性医院、专科医院、民营医院和集团医院等。 5. **业务范围广泛**:涵盖行政办公、医务室管理、科研管理、护士排班管理、党政管理和医患关系管理等多个方面。 6. **综合业务管理平台**:结合了卫生主管部门的管理规范和众多行业特色应用,是符合医院行业特点的综合业务管理平台。 7. **丰富的成功案例**:拥有众多成功案例,是医院综合业务管理软件中应用最广泛的之一。 需要注意的是,尽管红帆OA(医疗版)提供了强大的功能和广泛的应用场景,但任何软件系统都可能存在一定的安全风险,例如SQL注入漏洞等。因

    网页制作基础学习--HTML+CSS常用代码.txt

    网页制作基础学习--HTML+CSS常用代码

    ECHO HCS-2810ES_3810ES 操作手册

    HCS-2810ES_3810ES 说明书

    2024-2030中国3-吗啉丙磺酸市场现状研究分析与发展前景预测报告.docx

    2024-2030中国3-吗啉丙磺酸市场现状研究分析与发展前景预测报告

    node-v4.6.2-x64.msi

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    node-v8.8.1-linux-arm64.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    QYResearch:2023年前10大高流量治疗系统企业占据全球98%的市场份额.docx

    QYResearch:2023年前10大高流量治疗系统企业占据全球98%的市场份额.docx

    0.Python实现3D建模工具(上)内含设计文档和源码.md

    0.Python实现3D建模工具(上)内含设计文档和源码.md

    node-v8.8.1-linux-x86.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    c语言文件读写操作代码

    c语言文件读写操作代码

    node-v9.8.0-linux-arm64.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    公开整理-ESG视角下的多期DID构建数据集(2009-2022年).dta

    详细介绍及样例数据:https://blog.csdn.net/li514006030/article/details/138510939

    MATLAB编程高效实战:涵盖核心数学、科学计算、数据可视化及算法应用,助力工程师与研究人员的必备函数代码集

    这款“matlab常用的函数代码”资源是您的最佳助手!它详细介绍了matlab中常用的函数代码,包括基本数学运算、数组创建和操作、控制流、数据导入和导出、绘图、数学函数以及字符串操作等。无论您是工程师、研究人员、学生还是matlab爱好者,这个资源都适合您。 资源以通俗易懂的语言,配合实例演示,帮助您更好地理解和掌握matlab编程的核心技巧。您可以在学习matlab的过程中,将其作为参考资料,随时查阅和巩固知识点。也可以在准备matlab项目或考试时,通过这个资源进行复习和提升。此外,这个资源还可以作为教学资料,辅助教学和学习。 这个资源的优势在于它的全面性和实用性。它不仅涵盖了matlab中的常用函数代码,还提供了一些实用的编程技巧和经验分享。通过学习这个资源,您将能够更加熟练地使用matlab,解决实际问题和项目挑战。 这款“matlab常用的函数代码”资源旨在帮助您快速掌握matlab编程的基本知识和技能,为您的学术和职业生涯提供坚实的支持。还等什么呢?快来学习这个资源,开启您的matlab编程之旅吧!

Global site tag (gtag.js) - Google Analytics