zoukankan      html  css  js  c++  java
  • Popush源代码学习报告

    @肖剑楠 2011013223

    Popush采用NodeJS架构,网络通信使用了Socket.IO,同时基于Backbone.js实现了MVC架构。与Mongodb进行数据交互的部分封装成为Model,位于/models文件夹下;定义表层交互方式的部分封装为View,位于/static/js/views文件夹下,另外/static/js/room下的代码实现了代码编辑、实时聊天(尚不完整)等功能,/static/js/router.js定义了服务器的路由,根目录下的app.js完成了服务器的启动以及事件监听的处理。

    C/S架构交互方式

    前面提到Popush的网络通信基于Socket.IO。在app.js使用node启动时,服务器开始监听socket连接,当连接之后,会自动处理客户端发送的version,register,relogin等请求,对相应请求的处理如以下方式定义

    socket.on('request_name', function(data) {/* do something */});
    

    当客户端发出请求时,依照如下方式

    app.socket.emit('request_name', {para1: value1, ...});
    

    View模块

    在/static/index.html(561-572)中,引用了一系列*-view.js文件

    <script type="text/javascript" src="js/views/login-view.js"></script>
    <script type="text/javascript" src="js/views/register-view.js"></script>
    ......
    

    在这些文件中,都有相似的一句代码

    app.views['register'] = new app.RegisterView();
    OR app.views['account'] = new app.AccountView();
    

    这句代码的作用在于将所有的页面初始化,并存储在全局变量appviews属性中,方便之后的及时调用。 app.*View的定义由以下几个部分构成events, initialize,...,其中events定义了该页面上的响应事件,initialize定义了页面的初始化逻辑,另外还有一些其他的方法,主要用于定义事件的处理逻辑。

    Model模块

    与Mongodb的数据直接交互定义在/models/*DAO.js文件中,共有两个文件docDAO.js和userDAO.js,分别实现了用户信息和文档内容的增、删、查、更新等功能的支持。 与数据库相关的所有操作由变量db完成,db通过require数据库的配置来得到类似于connection的变量,通过调用该变量的insert,findOne,find,update等方法,即可实现与数据库的交互。由于Mongodb为对象型数据库,只需将查找条件以JSON格式作为参数传递进去即可,不需要编写复杂的SQL语句。

    业务实现逻辑举例分析

    以文件分享为例:

    1. 客户端请求 file-view.js(13),在events中定义了a.file-go-share的点击事件处理函数为share

      app.views.shares.shareModel = this.model; // 获取对model的引用 app.collections['shares'].set(this.model.get('members')); // 获取该文件的成员列表 $('#share').modal('show'); // 显示share对话框

    2. 值得一提的是,SharerlistView对应的是app.collections['share'],同时SharerlistView中的el属性定义了在html中绑定的元素位置#share,即为file-view.js中函数share所调用的#share,可以理解的是,*-view.js文件通过定义一系列的绑定事件,并在此之前已经在html中动态生成了对应的标签及id等属性,其他函数只需通过jQuery的selector访问即可。

    3. 在share对话框中,用户选择一个用户之后,点击分享按钮,触发share函数,该绑定在sharerlist-view.js(9)中定义,然后获取参数,校验之后,调用app.socket.emit('share', {/* params */})将请求发送给服务器。

    4. 服务器监听share请求,在app.js(346)中定义,如果会话失效,则返回'unauthorized',否则,调用docDAOaddMember函数将该记录添加到数据库中,并返回'share'响应,如果未出现异常,则将该信息广播至所有正在访问该文件的其他用户。客户端在收到'share'响应后,会调用detach函数执行相关处理。

  • 相关阅读:
    <Android 应用 之路> 天气预报(五)
    Java图形界面开发—列出指定目录
    解决The Network Adapter could not establish the connection
    <Android 应用 之路> 天气预报(四)
    Java集合框架—List
    Java集合框架—Map
    C#工程缺少IIS组件无法打开的解决办法
    关于com工程依赖的一些总结
    C:移位运算符
    void类型及void指针
  • 原文地址:https://www.cnblogs.com/fortnight/p/Popush_Learning_Report.html
Copyright © 2011-2022 走看看