当前位置: 首页 > news >正文

做医院网站公司电话汕尾住房和城乡建设局网站

做医院网站公司电话,汕尾住房和城乡建设局网站,我想注册公司怎么注册,方案图网站游戏启动过程 启动入口 在使用pomelo进行游戏开发时#xff0c;工程目录下的app.js是整个游戏服务器的启动运行入口。app.js中创建项目#xff0c;进行默认配置并启动服务器的代码如下#xff1a; var pomelo require(pomelo); var app pomelo.createApp(); app.set(na…游戏启动过程 启动入口 在使用pomelo进行游戏开发时工程目录下的app.js是整个游戏服务器的启动运行入口。app.js中创建项目进行默认配置并启动服务器的代码如下 var pomelo require(pomelo); var app pomelo.createApp(); app.set(name, nameofproject); app.start(); 从上面的代码可以看出用户首先需要在项目中引入pomelo然后创建application的实例app接着完成一些基本的应用配置最后应用就可以启动了。当app.js运行起来后pomelo会根据游戏的配置启动不同的相关组件及服务器。 服务器与组件 服务器启动流程的主要工作就是逐一启动app.load注册的组件。组件是连接pomelo框架和当前服务器所依赖的服务之间的桥梁。不同的服务器可以选择加载不同的组件。Pomelo提供了一些系统默认的组件主要包括handler, filter, master, monitor, proxy, remote, server, sync, connection。开发者也可以根据需要开发自己的组件并加载到服务器进程中。 组件同时是具有生命周期的其生命周期可以包括start, after start, stop等。在组件中可以实现这些方法应用服务器会在不同的运行阶段执行组件不同生命周期的方法。 启动流程详述 应用创建及启动 所有服务器的启动都是从运行app.js开始。每一个服务器的启动都首先创建一个全局唯一的application对象该对象中挂载了所在服务器的所有信息包括服务器物理信息、服务器逻辑信息、以及pomelo的组件信息等。同时该对象还提供应用管理和配置等基本方法。 在app.js中调用app.start()方法后application对象首先会通过loadDefaultComponents方法加载默认的组件。 组件加载 在加载组件时系统会根据application对象中服务器的信息针对不同的服务器加载不同的组件从而使得不同服务器进程对外提供不同个服务。对于master服务器主要加载的组件是master组件。Master组件主要负责根据根据servers.json文件中的配置信息和启动参数去启动其他服务器。对于其它服务器默认加载proxy、channel、sync、backendSession和server组件特定的服务器还需要加载特定的组件例如前端服务器会加载统计客户端连接数量的connection组件。具体组件的说明如下 master master组件主要负责启动master服务器。monitor monitor组件主要负责启动各个服务器的monitor服务该服务负责收集服务器的信息并定期向master进行消息推送保持master与各个服务器的心跳连接。proxy proxy组件主要负责生成服务器rpc客户端由于系统中存在多个服务器进程不同服务器进程之间相互通信需要通过rpc调用master服务器除外。remote remote组件主要负责加载后端服务器的服务并生成服务器rpc服务端。serverserver组件主要负责启动所有服务器的用户请求处理服务。connector: connector组件主要负责启动前端服务器的session服务和接收用户请求。sync sync组件主要负责启动数据同步模块并对外提供数据同步功能。connection: connection组件主要负责启动用户连接信息的统计服务。channel: channel组件主要负责启动channelService服务该服务主要提供channel相关的功能包括创建channel通过channel进行消息推送等。session: session组件主要负责启动sessionService服务该服务主要用来对前端服务器的用户session进行统一管理。backendSession: backendSession组件主要负责启动backendSession服务该服务主要负责维护服务器本地session并与前端服务器进行交互。dictionary: dictionary组件主要负责生成handler的字典。protobuf: protobuf组件主要负责解析服务端和客户端的proto buffer的定义从而对客户端和服务端的通信内容进行压缩。 组件概述 我们知道pomelo的应用程序执行的全部过程就是对其相应组件的生命周期的管理实际的所有逻辑功能均由pomelo组件提供。pomelo内建提供了十多个组件这些组件适用于不同的服务器提供不同的功能。有些组件提供的功能比较复杂有些则比较简单。下面我们将以提供的功能为主线来阐述pomelo提供的内建组件。 master组件 master组件仅仅由master服务器加载它主要的功能包括启动所有的应用服务器、管理和监控所有的应用服务器和接受管理客户端的请求与响应。 master服务器总是率先启动master组件在其start调用的最后才会调用Starter.start,Starter.start才会启动所有的应用服务器因此Master组件总是最先start。在Master组件的start调用中会完成以下几步: 加载注册Module到MasterConsoleServiceModule的导出方式有两种可以导出工厂函数也可以导出对象如果导出工厂函数的话其签名应该是 FacFunc(opts, ConsoleServicee),其中opts是用户调用app.registerAdmin的时候传入的ConsoleService则是具体的加载注册Module的MasterConsoleService。 在加载注册完所有的Module后会开启MasterAgent对端口的监听此时master就已经可以接收来自monitor和client的request和notify了。 开启监听后MasterConsoleService会enable所有的module这步操作主要是看看有没有module配置了周期性地拉去monitor信息也就是module的配置中有type选项和interval选项且type的值为pullinterval指定了周期则认为其配置了周期性监控操作此时会完成周期性事件的调度使得master可以周期性地获取监控信息。 最后如果有Module定义了start回调将会在这里调用一般在start回调里会做一些初始化信息。 经历了这些步骤后master完成启动。 在master组件的start方法里会根据用户提供的服务器配置信息启动用户配置的所有的具体应用服务器。 当master组件start结束后他将开启一个socket监听端口接受应用服务器和监控客户端的连接和注册收集应用服务器上报的监控信息给应用服务器推送一些消息并对管理客户端发出的管理请求给予响应。管理客户端如pomelo-cli可能发出的请求包括查看某个服务器进程状态增加一个服务器停掉一个服务器等。以增加一个服务器为例当管理客户端发出增加服务器请求时会提供相应的服务器参数如服务器类型主机ip开启的端口等。此时master组件接受后会启动相应的服务器并将新增加的服务器信息广播通知给其他已经启动的服务器。 master组件无配置项。 monitor组件 monitor组件由所有的包括master服务器在内的服务器都会加载它的主要功能就是与master建立连接进行通信从而对整个应用服务器群进行管理和监控。master服务器本身也会加载monitor服务器因为master服务器也会收集其本身自己的监控信息。 由于应用服务器是在master组件启动后期才创建因此monitor总是后于master启动。monitor的启动过程与master类似唯一不同的就是monitor会发起到master的连接而不是监听接口。monitor中同样也会使用与master完全相同的方式加载注册Module如果有Module配置了周期性地推送监控数据到master的话即其配置type的值为push,这里也会调度对应的事件使得能够周期地推送数据。最后如果有Module定义了start的话则会回调start。Monitor的启动过程与master基本一致。 monitor会通过master接受一些命令比如关闭整个服务器等。对于一些周期性监控的信息pomelo提供了两种收集方式即pull方式和push方式。pull方式要求master周期地去与monitor通信拉取相应的监控信息push方式则是由monitor周期地主动地向master报告其监控信息。 monitor组件无配置项。 filter pomelo内建了常见的一些filter用户可以通过如下的方式启用: app.filter(pomelo.filters.filterName(args));下面介绍一下这几个fitler: serial 这个filter是用来对用户请求做串行化的可以使得用户的请求只有在第一个请求被处理完后才会处理第二个请求。serial中使用了一个taskManager当用户请求到来时在beforeFilter中将用户的请求放到taskManager中taskManager中维护着一个task队列。在对应的afterFilter中如果taskManager还有未处理的请求将会处理其请求即在一个请求的afterFilter里启动在taskManager中还没处理的下一个请求这样就实现了请求的序列化。 timeout 这个filter是用来对服务端处理超时进行警告的在beforeFilter中会启动一个定时器在afterFilter中清除。如果在其定时器时间内afterFilter被调用定时器将会被清除因此不会出现超时警告。如果定时器超时时afterFilter还没有执行到则会引发超时警告,并记录日志。默认的处理超时是3秒可以在加载timeout的时候作为参数传入。 time 这个filter使用来记录服务器处理时间的在beforeFilter中会记录一下当前的时间戳在afterFilter中再次获取当前的时间戳然后两个时间戳相减得到整个处理时间然后记录日志。 toobusy 这个filter中一旦检测到node.js中事件循环的请求等待队列过长超过一个阀值时就会触发toobusy。一旦触发了toobusy那么toobusy的filter中将终止此请求处理链并在next调用中传递错误参数。 connector组件 connector组件是一个重量级的组件它会依赖于session组件server组件,pushScheduler组件和connection组件。connector组件仅仅被前端服务器加载它主要用来管理客户端的连接。connector组件会加载底层的connector创建端口监听绑定事件响应。当有客户端连接请求时connector组件会请求session组件获得当前连接的session如果session组件中没有相应的session的话session组件会为这个新连接创建新的session并维护相应的连接然后connector组件还会向connection组件上报连接信息供统计使用最后将拿到的session以及客户端的请求一起抛给server组件由server组件进行请求处理。当server组件处理完请求后又会通过connector组件将响应返回给客户端。在返回响应给客户端的时候connector组件做了一个缓存选择这个缓存实现依赖于pushScheduler组件也就是说connector组件并不是直接将响应发给客户端而是将响应给pushScheduler组件。pushScheduler组件根据相应调度策略可能不缓存直接通过session组件维护的连接将响应发出去也可能进行缓存并按时flush。这是可以配置的。 connector组件支持如下配置项: connector: 底层使用的通信connector不配置的话会默认使用sioconnector;useProtobuf: 目前仅仅支持connector配置使用hybridconnector的情况配置其为true将开启消息的protobuf功能useDict 目前仅仅支持connector配置使用hybridconnector的情况配置其为true时将会开启基于字典的路由消息压缩useCrypto 目前仅仅支持connector配置为hybridconnector的情况配置其为true时将会启用通信时的数字签名encode/decode 消息的编码解码方式如果不配置的话将会默认使用connector配置中底层connector提供的相应的编码解码函数。transports这个配置选项是用于sioconnector的因为socket.io的通信方式可能会有多种如websocketxhr-polling等等。通过这个配置选项可以选择需要的方式。 配置connector组件通过调用如下方式进行: app.set(connectorConfig, opts);session组件 session组件跟connector相关也是仅仅被前端服务器加载为sessionService提供一个组件包装, 加载session组件后会在app的上下文中增加sessionService可以通过app.get(sessionService)获取。它主要用来维护客户端的连接信息以及生成session并维护session。如果与经典TCP进行类比的话那么session中维护的连接就可以粗略地认为就是TCP服务器端accept返回的socket句柄。一个连接与一个session对应同时session组件还维护具体登录用户与session的绑定信息。一个用户可以有多个客户端登录对应于多个session。当需要给客户端推送消息或者给客户端返回响应的话必须通过session组件拿到具体的客户端连接来进行。 session组件支持如下配置项: singleSession 如果这个配置项配置为true的话那么将将不允许一个用户同时绑定到多个session在绑定用户一次后后面的绑定将会失败。 配置session组件通过调用如下方式进行: app.set(sessionConfig, opts);connection组件 connection组件是一个功能相对简单的组件也是仅仅被前端服务器加载,为connectionService提供一个组件包装,他主要进行连接信息的统计,connector组件接收到客户端连接请求以及有客户端离线时以及用户登录下线等等情况都会向其汇报。 connection组件无配置项。 server组件 server组件也是一个功能比较复杂的组件它被除master外的服务器加载。server组件会加载并维护自身的Filter信息和Handler信息。server组件会从connector组件的回调里获得到相应的客户端请求或者通知然后会使用自己的before filters对其消息进行过滤再次调用自己的相应Handler进行请求的逻辑处理然后将响应通过回调的方式发给connector处理。最后调用after filters进行一些清理处理。 当然如果客户请求的服务本来就是前端服务器提供的话会是上面的那种处理流程。如果客户请求的服务是后端服务器提供的服务的话则将不是上面的那种处理流程此时会出现sys rpc调用。前面那种前端服务器自己处理的情况具体调用为doHandle而发起rpc调用的情况则为doForward。这两种处理流程的不同点是对于自身的请求调用自己的filter-handler链进行处理对于不是前端服务器自己提供的服务则是发起一个sys rpc然后将rpc调用的结果作为响应发给connector进行处理。关于这个rpc调用则是pomelo内建的msgRemote实现的。 对于后端服务器来说其客户请求不是直接来源于真实的客户端而是来源于前端服务器对其发起的sys rpc调用这个rpc调用的实现就是pomelo内建的msgRemote在msgRemote的实现里会将来自前端服务器的sys rpc调用请求派发给后端服务器的server组件然后后端服务器会启用filter-handler链对其进行处理最后通过rpc调用的返回将具体的响应返回给前端服务器。 在前端服务器将客户端请求向后端服务器分派时由于同类型的后端服务器往往有很多因此需要一个路由策略router一般情况下用户通过Application.route调用为后端服务器配置router。 server组件无配置项。 pushScheduler组件 pushScheduler组件也是一个功能较为简单的组件它仅仅被前端服务器加载与connector组件的关系密切。当connector组件收到server组件的对客户端请求的响应后connector并不直接将此响应返回给客户端而是将这个给客户端发送响应的操作调度给scheduler组件。pushScheduler组件完成最后通过session组件拿到具体的客户端连接并将请求的响应发送给客户端的任务。因此通过pushScheduler组件可以对发给用户的响应进行缓冲从而提高通信效率。pomelo实现了两种调度策略一种是不进行任何缓冲直接将响应发送给客户端一种是进行缓冲并定时地将已缓冲的响应发送给对应的客户端。 pushScheduler配置项: scheduler scheduler组件的具体调度策略配置默认的是直接将响应发给客户端同时pomelo还提供了有缓冲并且定时刷新的调度策略。用户也可以自定义自己的调度策略。 配置pushScheduler组件通过调用如下: app.set(pushSchedulerConfig, opts);如果要启用使用缓冲的scheduler的话可以在app.js中增加: app.set(pushSchedulerConfig, {scheduler: pomelo.pushSchedulers.buffer, flushInterval: 20});flushInterval是刷新周期默认为20毫秒。 proxy组件 proxy组件是一个重量级的组件它被除master外的所有服务器加载。proxy组件会扫描具体应用服务器的目录抽取其中的remote部分由于javascript语言的动态性可以很轻易地获得到remote中的关于远程调用的元信息生成stub并将这些调用都挂到app.rpc下面当用户发起rpc调用时proxy组件会查看其扫描到的stub信息以此决定此远程调用是否合法。同时proxy又会创建一个RpcClient当发起远程调用时负责与远端的remote进行通信并得到远程调用的结果供调用者使用。当进行远程调用时由于同类型的远程服务器可能有多个所以这里同样需要配置相应的router。 proxy的配置项 cacheMsg, 配置cacheMsg为true的话将开启rpc调用时的对消息的缓冲而不是直接一旦有rpc请求就发出。interval, 与配置参数cacheMsg配合使用设置flush缓存的周期mailBoxFactory, rpc底层实现需要的用户可以定义自己的mailBoxFactory,我们将在rpc原理里面详述。 另外可以开启rpc的调用日志通过如下的调用: app.enable(rpcDebugLog);配置proxy使用 app.set(proxyConfig, opts);remote组件 remote组件是与proxy组件对等的组件它用来提供rpc调用服务。rpc组件完成对当前服务器的remote的加载并开启监听端口等待rpc客户端的连接及相应的rpc调用。当接收到具体的调用请求时会根据调用请求中描述的调用请求信息调用相应的remote中的相应方法。然后再将具体的处理结果返回给rpc客户端。rpc服务端还支持对调用请求的filter也就是说跟server组件处理客户端请求一样rpc服务端处理具体请求时也会使用filter-remote链进行处理。 remote组件配置项: cacheMsg, 与proxy组件的含义相同interval 与proxy组件的含义相同acceptorFactory, rpc底层实现需要的,可以认为跟proxy配置中的mailBoxFactory是对等的我们将在rpc原理里面详述。 跟proxy组件一样用户可以开启rpcDebugLog来得到所有的rpc调用过程的日志。 配置remote组件使用 app.set(remoteConfig, opts);dictionary组件 dictionary组件是一个可选组件不会被默认加载只有当connector组件的配置中开启了useDict的时候此组件才会被加载。此组件会遍历所有handler的route字符串还会从config/dictionary.json中读取客户端的route字符串然后对这些字符串进行编码给予每一个路由赋予一个唯一的小整数实现route信息压缩当客户端与前端服务器通信时需要路由信息时将不会再使用很长的那个字符串而仅仅使用一个小整数。 dictionary的配置项: dict, 客户端路由字符串文件的位置默认使用的是config/dictionary.json 配置dictionary组件使用: app.set(dictionaryConfig, opts); protobuf组件 protobuf组件也是一个可选组件不会被默认加载只有当connector组件的配置中开启了useProtobuf的时候此组件才会被加载。此组件会加载对应的proto文件并完成消息的基于protobuf的编解码。默认的proto文件的配置信息在config/serverProtos.json和config/clientProtos.json中。具体会在详细介绍pomelo-protobuf中详细介绍。 protobuf组件无配置项。 channel组件 channel组件维护channel信息可以被除了master之外的服务器加载。channel组件可以看作是channelService的组件包装,加载该组件后会在app上下文中加入channelService可以通过app.get(channelService)获取。可以认为一个channel就是一个用户的集合每一个用户大致对应于前端服务器中的一个session用户可以通过channel组件向一个channel里面的所有用户推送消息。当然由于后端服务器并不与客户端直接相连故后端服务器会发起一个sys rpc来表示向客户端推送消息接受这个远程调用的是pomelo已经实现的ChannelRemote。 channel组件的配置项 broadcastFilter broadcast的过滤函数。会在执行channel的broadcast的时候在前端服务器上在消息发送给每个session之前进行一个过滤。其函数签名为 broadcastFilter(session, msg, filterParam) 其中filterParam参数由在channelService的broadcast调用时传入如下: channelService.broadcast(type, route, {filterParam: param}, cb);可以通过如下方式对Channel组件进行配置 app.set(channelConfig, opts)backendSession组件 BackendSession组件可以看作是BackendSessionService的组件包装加载该组件后会在app的上下文中加入backendSessionService可以通过app.get(backendSessionService)调用获取。可以被除了master之外的服务器加载。它主要为后端服务器提供BackendSession信息并通过远程过程调用完成一些比如对原始session绑定uid等操作。 backendSession组件无配置项。
http://www.zqtcl.cn/news/402890/

相关文章:

  • 做网站业务员提成几个点wordpress 地图导航代码
  • 软件下载网站排行住房和城乡建设部办公厅网站
  • 贵阳网站建设需要多少钱百度资源搜索平台
  • 做安全防护信息的网站wordpress初始密码
  • 广东企业网站seo哪里好微信公众号怎么创建文章
  • 建行网站登录不了wordpress好主题
  • 南屏网站建设湖北省建设厅的网站
  • 有没有做花卉种子的网站啊正规网站建设服务
  • 长沙网站建设公司招聘那个建设网站好
  • 网站开发视频下载网站优化关键词排名自己怎么做
  • 网站建设 流程咸宁网站建设哪家好
  • 建站公司兴田德润实惠钦州建设局网站
  • 高新区免费网站建设旅游网站开发设计与实现
  • 怎样做才能让网站帮忙送东西线上推广方案怎么做
  • 服装公司网站网页设计友情链接交换网站
  • 公司建设网站需要去哪报备网页挂马
  • 做网站需要代码吗秦皇岛在哪里
  • 番禺网站设计公司万网查询全部域名
  • 电子商务网站建设与运营的试题集团高端网站
  • 天津网站建设电话网页制作与设计调试分析
  • 深圳中建南方建设集团网站自己的网站建设
  • 有些网站怎么经常换域名北京宣传片制作公司
  • 网站改版降权多久恢复经典网站
  • 南昌建网站的公司中国专业做鞋子的网站
  • 做100个垂直网站网站建设外包
  • 网站开发图片素材营销软文的范文
  • 手机网站免费建设排行湖南公司响应式网站建设价位
  • 专业网站设计制作价格wordpress 动画特效
  • 如何找企业联系做网站网站内容建设的核心和根本是
  • 网站制作找如何判断一个网站是恶意网站