![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Pomelo服务器框架
文章平均质量分 88
IT 哈
这个作者很懒,什么都没留下…
展开
-
联机游戏原理入门即入土 -- 入门篇
联机游戏转载 2022-09-15 10:06:50 · 4772 阅读 · 0 评论 -
Linux I/O 原理 和零拷贝技术
导言如今的网络应用早已从 CPU 密集型转向了 I/O 密集型,网络服务器大多是基于C-S模型,也即客户端 - 服务端模型,客户端需要和服务端进行大量的网络通信,这也决定了现代网络应用的性能瓶颈:I/O。传统的 Linux 操作系统的标准 I/O 接口是基于数据拷贝操作的,即 I/O 操作会导致数据在操作系统内核地址空间的缓冲区和用户进程地址空间定义的缓冲区之间进行传输。设置缓冲区最大的好处是可以减少磁盘 I/O 的操作,如果所请求的数据已经存放在操作系统的高速缓冲存储器中,那么就不需要再进...转载 2021-11-04 18:42:53 · 320 阅读 · 0 评论 -
系统架构的漫长演变之路
阶段一:单体应用架构网站发展的初期,所有的应用都部署在同一台服务器。阶段二:应用服务器和数据库服务器分离随着互联网的发展,网站上线之后,用户的访问量持续增加,服务器的负载压力变大,而在代码层面的优化没有什么进步,所以从硬件方面考虑,增加服务器的数量,应用服务器和数据库服务器分离,尽可能提高性能。阶段三:应用服务器集群随着互联网的进一步发展,访问人数日益增加,应用服务器的负载压力急剧增大,选择增加应用服务器的数量,搭建集群,将访问的流量分发到各个服务器,从而提升转载 2021-10-22 13:18:14 · 278 阅读 · 0 评论 -
Pomelo Application
应用程序配置,如何配置Pomelo框架?Pomelo可以配置各个组件的选项,加载配置文件,开启Pomelo的特性等,这些配置都是在game-server/app.js文件中进行的。实际上在Pomelo的应用中有两个app.js,一个是在game-server目录下,一个是在web-server目录下。game-server下的app.js是整个游戏服务器的入口和配置点。web-server下的app.js是Web服务器入口。pomelo进程pomelo框架是如何驱动的呢?当应用启动后,使用p转载 2021-10-02 16:13:14 · 398 阅读 · 0 评论 -
commander.js基本用法
准备工作安装nodejs 安装commander.js,执行npm install commander --saveversion方法作用:定义命令程序的版本号参数说明:版本号<必须> 自定义flag<可省略>,默认为-V和--version使用:(1)只传入版本信息 // index.js const program = require('commander'); program .version('1.0..转载 2021-09-22 11:17:52 · 1267 阅读 · 0 评论 -
HTTP服务器的本质:tinyhttpd源码分析及拓展
已经有一个月没有更新博客了,一方面是因为平时太忙了,另一方面是想积攒一些干货进行分享。最近主要是做了一些开源项目的源码分析工作,有c项目也有python项目,想提升一下内功,今天分享一下tinyhttpd源码分析的成果。tinyhttpd是一个非常轻量型的http服务器,c代码500行左右,可以帮助我们了解http服务器运行的实质。在分析之前,我们先说一下http报文。一.http请求http请求由三部分组成,分别是:起始行、消息报头、请求正文Request Line<CRLF>转载 2021-09-16 10:37:37 · 369 阅读 · 0 评论 -
简单明了的进程、线程教程
用户角度打开电脑后,就可以同时使用多个应用程序。可以一边上网,一边听音乐,一边微信聊天,一边用vscode写代码。操作系统角度对于操作系统来说,它需要做的事情就是如何管理这些应用程序。用什么去管理呢?首先需要把这些应用程序抽象出来,叫做什么呢,就叫做进程吧。有些App运行起来,可能仅仅需要一个进程去维护应用的状态,而有些则需要多个进程。例如一个浏览器,某个进程负责渲染页面,某个进程...转载 2019-05-22 15:58:23 · 439 阅读 · 0 评论 -
经典游戏服务器端架构概述
架构的分析模型一. 讨论的背景现代电子游戏,基本上都会使用一定的网络功能。从验证正版,到多人交互等等,都需要架设一些专用的服务器,以及编写在服务器上的程序。因此,游戏服务器端软件的架构,本质上也是游戏服务器这个特定领域的软件架构。软件架构的分析,可以通过不同的层面入手。比较经典的软件架构描述,包含了以下几种架构: 运行时架构——这种架构关心如何解决运行效率问题,通常以程序进程图、数据流图为表达方式。在大多数开发团队的架构设计文档中,都会包含运行时架构,说明这是一种非常重要的设计方面。这种架转载 2020-10-05 21:16:17 · 4227 阅读 · 1 评论 -
理解水平扩展和垂直扩展
当一个开发人员提升计算机系统负荷时,通常会考虑两种方式垂直扩展和水平扩展。选用哪种策略主要依赖于要解决的问题 以及系统资源的限制。在这篇文章中我们将讲述这两种策略并讨论每种策越的优缺点。如果你已经有一个软件系统需要不断成长,那么你将有意或者无意中选择这两 种策略中的一种。垂直扩展在垂直扩展模型中,想要增加系统负荷就意味着要在系统现有的部件上下工夫,即通过提高系统部件的能力来实现。例如,假设你现在负责一批木材采伐的操作。在这个例子中,我们假设有3辆卡车,每辆车一次可以运25根木材,计算花.转载 2020-07-01 17:08:22 · 2494 阅读 · 1 评论 -
游戏服务器架构
一、游戏服务器特征游戏服务器,是一个会长期运行程序,并且它还要服务于多个不定时,不定点的网络请求。所以这类服务的特点是要特别关注稳定性和性能。这类程序如果需要多个协作来提高承载能力,则还要关注部署和扩容的便利性;同时,还需要考虑如何实现某种程度容灾需求。由于多进程协同工作,也带来了开发的复杂度,这也是需要关注的问题。功能约束,是架构设计决定性因素。基于游戏业务的功能特征,对服务器端系统来说,有以下几个特殊的需求:游戏和玩家的数据存储落地对玩家交互数据进行广播和同步重要逻辑要在服务器上运转载 2020-06-24 16:31:44 · 678 阅读 · 0 评论 -
NodeJS 开发多人实时对战游戏服务器 (一)
从一个游戏情怀说起接触的第一款多人对战游戏是帝国时代,依稀记得那时候上学每周最期待的就是冲到电脑课撸一把罗马复兴,高中开始接触《魔兽争霸3》,一款真正让我迷恋十多年的游戏,怀念那时候的《魔兽争霸十大经典战役》还有到图书馆翻 《大众软件》找各种电子游戏相关的新闻的日子,之后和很多人的经历一样,有了 Dota 有了王者荣耀,打一款MOBA游戏几乎成家常便饭,最近也没忍住撸到王者六十多星 ╮(╯_╰)╭。帝国时代魔兽争霸3阴差阳错成为了一名码农,但不幸的是从来没有机会真正去涉足游戏开发者转载 2020-06-24 15:40:44 · 2886 阅读 · 0 评论 -
Pomelo框架总结
Pomelo框架总结A fast,scalable,distributed game server framework for Node.js联系我Pomelo交流群 @老顽童-NextZeus 微信群 BJ NodeJS Club @老顽童适用场景多人游戏:手游,社交游戏,网页游戏,MMORPG ,ARPG 实时应用:聊天,消息推送,等等特点高性能:基于Node.js...转载 2020-04-05 21:09:13 · 1870 阅读 · 0 评论 -
Pomelo Application
应用程序配置,如何配置Pomelo框架?Pomelo可以配置各个组件的选项,加载配置文件,开启Pomelo的特性等,这些配置都是在game-server/app.js文件中进行的。实际上在Pomelo的应用中有两个app.js,一个是在game-server目录下,一个是在web-server目录下。game-server下的app.js是整个游戏服务器的入口和配置点。web-server下的...转载 2020-04-03 17:16:13 · 421 阅读 · 0 评论 -
C++后台实践:古老的CGI与Web开发
谈到web开发,大家首先想到的PHP、JavaEE/JSP、.NET/ASP、Ruby on rails、Python的Django等等。可谓百花齐放,你一般不会想到C++和Web开发有什么关系,但其实动态网页的开发(web开发)可是在这些动态网页语言诞生之前就存在了的。所以C/C++也是可以做web开发的,它利用的技术是——CGI。在天地初开,混沌未分之时,动态网页语言尚未出...转载 2020-04-03 15:51:56 · 640 阅读 · 0 评论 -
pomelo入门04
写完前面的两篇文章,一直走的都是master服务器的流程,那么这一篇就真正涉及到master服务器的启动过程了,在真正开始之前,先回顾一下前面的两篇文章。。(1)创建app的过程,这部分主要要完成的功能是读入用户定义的配置参数,并保存和处理这些配置参数。(2)启动app的过程,这部分主要要完成的功能是load组件,完成对组件的包装(前面已经对master组件进行了说明,在真正的master...转载 2020-04-03 13:40:54 · 190 阅读 · 1 评论 -
Pomelo入门03
这篇文章要分析如下部分的代码:// app configureapp.configure('production|development', function() { // route configures app.route('chat', routeUtil.chat); //chat是server类型,第二个是route函数 // filter configures a...转载 2020-04-03 13:39:21 · 231 阅读 · 0 评论 -
pomelo入门02
距离上一篇pomelo已经有一段时间了吧,总是有一些事情要做。。这一篇来写pomelo的application的创建过程。。当然例子还是以官方的chat。。。。主要是来分析下面这段代码:var app = pomelo.createApp();我们首先来看看pomelo的定义吧:var fs = require('fs');var path = require('pat...转载 2020-04-03 13:38:18 · 311 阅读 · 0 评论 -
pomelo入门01
一直觉得没有读过什么node.js的框架,觉得很遗憾。。。好了,从今天开始,读pomelo的源代码。。。网易开源的游戏服务器框架,看介绍。。应该还不错。。先看看吧。。。从它给的聊天的例子来开始吧。。。比较简单。。。无非就是web端通过websocket发送数据到服务器,然后服务器再广播给同房间的人就ok了。。。我们先来看看pomelo发送数据的格式吧,也就是它的encode方法:...转载 2020-04-03 13:36:45 · 543 阅读 · 0 评论 -
pomelo【1】起步、概述
1、起步1.1、欢迎使用pomelopomelo是一个游戏服务器框架,与以往单进程的游戏框架不同, 它是高性能、高可伸缩、分布式多进程的游戏服务器框架。pomelo包含:框架、库、工具、客户端库、demo。pomelo优势架构的可伸缩性好 易用 框架的松耦合和可扩展性好 完整的demo和文档pomelo的定位pomelo是一个轻量级的服务器框架,它最适合的应用...转载 2020-02-16 20:53:18 · 972 阅读 · 0 评论 -
pomelo广播的实现(chat例子分析)
其实最开始要读pomelo框架无非是因为自己没有读过什么node.js框架的源码,不过后来就逐渐变成了想要知道pomelo框架是如何实现广播的,貌似这也是游戏服务器比较重要的功能吧。。。。一开始会觉得这种广播在分布式的环境下实现会比较的复杂。。但是当搞明白了pomelo的实现之后,发现它是采用了一种折中的方法实现广播。。虽然没有刚开始自己想的那么牛逼,不过觉得也算是一种比较好的解决方案吧。。...转载 2020-01-24 15:09:45 · 523 阅读 · 0 评论 -
pomelo之session与sessionService分析
在看pomelo的session之前,我们先来看看pomelo的组件加载过程: if(app.isFrontend()) { //前端服务器 才需要载入的组件 app.load(pomelo.connection, app.get('connectionConfig')); //connection组件用于维护连接,比如说连接的状态 app.load(pome...转载 2020-01-24 15:08:15 · 887 阅读 · 0 评论 -
pomelo的rpc服务器–remote组件
前面的文章已经讲过了pomelo框架是如何进行rpc调用的,不过主要涉及到的是客户端方面,例如rpc调用的消息格式等。。。那么这篇文章就来讲讲rpc的server部分究竟是怎么运行的。。。在开始之前,我们先来看看pomelo的配置信息:{"id":"connector-server-1", "host":"127.0.0.1", "port":4050, "clientPort": 30...转载 2020-01-24 15:06:34 · 466 阅读 · 0 评论 -
pomelo之proxy组件与rpc客户端
在真个pomelo框架的运行中,会涉及到很多的远程方法调用,例如frond服务器调用backend服务器的方法。。。那么要搞懂这些远程方法调用究竟是怎么运行的,那么就需要搞懂pomelo的proxy组件以及pomelo自己的rpc模块,搞定他们的一些协议定义,那么这篇文章就来分析这个proxy组件吧,先来看看它是怎么构造的。。。module.exports = function(app,...转载 2020-01-24 15:03:46 · 638 阅读 · 0 评论 -
pomelo之server的启动。。
前面的一片文章分析了master服务器的启动:主要就是载入和启动组件,而且master的具体工作还是在其的console,对于master究竟在干些什么东西,并没有看的太多,以后涉及到了再细看吧。。那么这篇文章就来看看其余的server是怎么启动的,顺便还要看看他们是怎么进行工作的。。。。好吧,还是首先从application的创建开始吧:Pomelo.createApp = ...转载 2020-01-24 15:00:57 · 570 阅读 · 0 评论 -
pomelo组就之server组件分析
在前面的一篇文章中知道了connector组件的作用,而且知道了,connector接收到数据之后,会调用server组件的handle方法来处理这些数据,那么这篇文章我们就来看看server组件究竟是怎么进行工作的吧。。。首先我们来看看server组件的包装器的定义:/** * Component for server starup. */var Server = require...转载 2020-01-24 14:58:47 · 368 阅读 · 0 评论 -
Pomelo 内置组件(Builtin components)介绍
Pomelo 的应用程序执行过程,就是对其相应组件生命周期的管理,而实际上所有的逻辑功能均由 Pomelo 组件提供。Pomelo 框架内建并提供了十多个组件,这些组件用于不同的负载服务器,并提供了各种功能。本篇将以这些组件所提供的功能为主,对这些组件进行介绍。Master Monitor Connector Session Connection Server PushSchedu...转载 2020-01-24 14:20:25 · 314 阅读 · 0 评论 -
pomelo启动流程图
Pomelo组件职责简介master: master组件主要负责启动master服务器。monitor: monitor组件主要负责启动各个服务器的monitor服务,该服务负责收集服务器的信息并定期向master进行消息推送,保持master与各个服务器的心跳连接。proxy: proxy组件主要负责生成服务器rpc客户端,由于系统中存在多个服务器进程,不同服务器进程之间相互通信需要...转载 2020-01-24 14:07:49 · 311 阅读 · 0 评论 -
深入浅出 node.js 游戏服务器开发——基于 Pomelo 的 MMO RPG 开发
在上一篇文章中,我们介绍了如何使用 Pomelo 来搭建聊天服务器。在这篇文章中,我们为大家介绍如何使用 Pomelo 框架来搭建 MMO RPG 服务器,并分析其设计思路和实现方法。以此来帮助大家更好的理解和使用 Pomelo 框架,理解 Pomelo 框架游戏开发的基础流程,使用方法和设计理念。 本文中的游戏服务端架构,只是为了说明 Pomelo 的开发理念和设计思...转载 2019-12-12 16:54:15 · 772 阅读 · 0 评论 -
pomelo + vscode + typescript搭建可约束可调试的游戏服务端框架
说在前面pomelo: 它是网易开源的一套基于Node.js的游戏服务端框架,详情请戳这里关于pomelo的种种这里不详细说。点击链接查看详情。但是由于pomelo是js项目,使用起来的时候并不是很爽,所以就有了ts的引入。typescript: TypeScript是一种由微软开发的自由和开源的编程语言。它是JavaScript的一个超集,而且本质上向这个语言添加了可选的静态类型和基于类...转载 2019-12-10 17:14:15 · 1932 阅读 · 0 评论 -
Lordofpomelo游戏分析
##游戏体验在线地址##部署游戏lord of pomelo安装指南##分析思路游戏服务器的流程除了启动部分外,大部分事件和流程都是并发的,如果按照一个流程去描述这样一件事情,会很混乱,所以我会根据自己对代码的理解,分开不同用户模块,不同业务去分析Lordofpomelo的代码。##Lordofpomelo 服务器介绍各类服务器介绍##Lordofpomelo启动...转载 2019-11-21 17:15:19 · 608 阅读 · 0 评论 -
A vulnerability in pomelo
A vulnerability in pomelo#1149 We found that pomelo allows external control of critical state data. A malicious user-input can corrupt arbitrary methods and attributes in template/game-ser...转载 2019-11-08 10:52:45 · 167 阅读 · 0 评论 -
nodejs+pomelo+mysql实战经验分享
Pomelo我的仓库地址Overview介绍pomelo 是一个与以往单进程的游戏框架不同,拥有高性能,高可伸缩性,分布式多进程的游戏服务器框架。Easy configure , Easy use! 它包括基础开发框架和一系列相关工具和库 pomelo-rpc,pomelo-rpc-zeromq,pomelo-scheduler,pomelo-status-plugin,b...转载 2019-11-07 16:55:05 · 1265 阅读 · 0 评论 -
彻底理解epoll
网卡接收数据image.pngimage.png在 ① 阶段,网卡收到网线传来的数据; 经过 ② 阶段的硬件电路的传输; 最终 ③ 阶段将数据写入到内存中的某个地址上。 这个过程涉及到 DMA 传输、IO 通路选择等硬件有关的知识,但我们只需知道:网卡会把接收到的数据写入内存。通过硬件传输,网卡接收的数据存放到内存中,操作系统就可以去读取它们。如何知道接收了数据?要...转载 2019-11-07 13:59:34 · 1525 阅读 · 0 评论 -
Node.js 之网游服务器实践
随着Node.js的不断发展与壮大,应用范围也越来越广泛,从传统的企业应用,到互联网使用,再到云计算的发展,它的身影也是随处可见。当然,它的受欢迎程度能在短时间内得到这么快的发展,除却与其本身的事件模型及V8的性能优化等一系列特性有关之外,还和国内外很多互联网公司的攻城师的大量应用和参与到开源项目中有密切关系,如网易的游戏开发,淘宝的数据之美等等。随着 HTML5 应用和移动互联网平台的指...转载 2019-10-31 17:02:59 · 735 阅读 · 0 评论 -
客户端通过路由和参数调用后端服务器中handler中的方法(如聊天服务器调用发送消息的服务器)
1) pomelo服务器分为前端服务器和后端服务器2)后端服务器的handler里面的东西是给前端使用的比如: 玩家想利用聊天服务器发送一条消息chat后端服务器的chathandler.js中handler.send = function(msg, session, next) { var rid = session.get('rid');}前端使用后端服务器的handler中...转载 2019-10-26 21:37:00 · 444 阅读 · 0 评论 -
pomelo之master服务器的启动
写完前面的两篇文章,一直走的都是master服务器的流程,那么这一篇就真正涉及到master服务器的启动过程了,在真正开始之前,先回顾一下前面的两篇文章。。(1)创建app的过程,这部分主要要完成的功能是读入用户定义的配置参数,并保存和处理这些配置参数。(2)启动app的过程,这部分主要要完成的功能是load组件,完成对组件的包装(前面已经对master组件进行了说明,在真正的master...转载 2019-10-25 23:38:19 · 907 阅读 · 0 评论 -
Lordofpomelo游戏分析
游戏体验在线地址部署游戏lord of pomelo安装指南分析思路游戏服务器的流程除了启动部分外,大部分事件和流程都是并发的,如果按照一个流程去描述这样一件事情,会很混乱,所以我会根据自己对代码的理解,分开不同用户模块,不同业务去分析Lordofpomelo的代码。Lordofpomelo 服务器介绍各类服务器介绍Lordofpomelo启动流程Lordofpomelo...转载 2019-10-22 16:09:33 · 317 阅读 · 0 评论 -
pomelo mysql学习(一)配置文件、domain
目标:在简单的部署基础上,进一步提升需求,新用户注册,在数据表user中添加一条数据。一、在数据库中新建一个table ,命名为user。二、公共文件和配置文件,一些会被引用的组件修改shared里面mysql配置文件,之后再game-server/app/dao下配置好dao-pool.js和mysql.js。修改servers.json{ "development"...转载 2019-10-22 16:02:43 · 629 阅读 · 0 评论 -
干货,pomelo路由解读
pomelo的初衷是后台服务器无状态,因此它可以任意使用配置规则来扩展其后台服务器以承载更多的游戏玩家,但实际上还是要面临A玩家在cs1前台并在bk1后台的问题。假如玩家A被分配在了空闲的cs1前台,并且cs1前台路由的是比较合适的bk1后台看图:由于还有bk2后台,因为cs1需要知道如何来选择此玩家的请求被正确处理。因为逻辑部分最终是落在bk1上的,因此我们认为玩家A在bk1是有...转载 2019-10-22 15:54:55 · 897 阅读 · 0 评论 -
游戏大版本更新和热更新
游戏上线后,遇见bug或者需要更新内容(包括资源,玩法,数值调整,游戏脚本等)的时候,一般有2种做法。第一种,发个新包,然后让玩家下载新的版本;第二种,在游戏内更新,游戏启动时去下载需要更新的资源。第一种我们一般称为游戏大版本更新,第二种称为热更新。一般来说,不能通过小版本更新解决的问题,才会用到大版本更新,例如,不可热更的游戏代码。而热更新是建立在每次大版本更新的基础上进行的更新,因此,这2...转载 2019-10-21 16:38:11 · 1452 阅读 · 0 评论