-
手机游戏服务器该如何开发呢?
春节以来新型肺炎蔓延全国,而为了防止病毒的传播,各地封路封城,国民基本都是宅在家里面足不出户,受此影响国内养殖、娱乐、零售、旅游、餐饮等众多行业都遭受到重创。 不过有一个行业却在这个假期迎来了爆发。 什么行业呢?既然只能在家,那么精神方面的娱乐就便不能少。于是在国内许多行业受疫情影响处于低迷之时,游戏行业却逆势实现了增长。毕竟无聊的时候,打游戏是不错的选择。 手游上线,手游服务器也要与时俱进,及时做好数据备份工作。那么,手机游戏服务器该如何开发呢? 下面MMCloud小编就随便聊聊手机手机游戏服务器开发需要的技术。 一.聊聊手游服务器开发有哪些东西要考虑。 1.开发语言的选择: 工欲善其事,必先利其器,选择一门适合的开发语法对后期开发有着事半功倍的作用。 业界主要的是c/c++ + Python/lua模式做手机游戏服务器。c/c++做网络通讯数据传输,python/lua做业务逻辑。这样既保持了网络传输的效率(c++),又提升开发效率(Python/lua),同时也支持热更新。 当然,也有其他服务器开发语言,erlang(没用过,页游公司用的多),c#(大棒子国喜欢用,神奇的民族),Java(第一次听说时我惊呆了),node.js(少量游戏用的,还有一个node.js写的引擎叫pemolo),php(做http协议通讯的游戏时php+mysql也不失为一种好选择) 看过两个手机游戏服务器引擎 1.firefly(9秒社团开发的一款python手机游戏服务器框架) 2.kbengine(按bigworld的架构来设计的,c++ + python的) 2.数据库 现在比较流行的两种数据库,关系型数据库mysql和非关系型数据库mongodb。这是我用的最多的两个数据库。 关于两者之间的各种比较,网上有很多,当然你也可以用其他数据库,至于sql server,不怕被坑你就用吧(我向来对微软的东西没好感)。 3.服务端架构 讲一下我用过的其中一种架构模型,也是公司按照bigworld架构设计的: 1.Gate:首先要有一个Gate(网关)服务器,负责客户端连接及消息转发到Game(游戏服),保持客户端到服务端的连接 没有任何逻辑,只做消息加密和解密,以及客户端和服务器消息的转发(相当于两者之间的桥梁). 2.GameServer:GameServer是游戏进程,提供游戏逻辑功能(采用单进程(或者单线程)模型,手机游戏服务器的瓶颈从来不在CPU,所以只做逻辑功能的话单线程足够了,在这里没必要用多线程或多进程)。 3.DBManager:实现数据库的读写,方便Game服务器异步读写数据库的数据(有些把数据库读写放在游戏服,没有单独的服务器,那恐怕游戏服单进程就不够用了)。 4.GameManager:负责管理所有的GameServer,GameServer之间消息转发,提供广播到所有Game的功能。 4.协议 客户端与服务器之间协议通信,可以用tcp或者http。主要看游戏模型,如果是那种弱联网单机玩法,用http足够了,像天天酷跑之类,只在需要的时候处理一条http请求响应。 不过tcp用的比较还是比较多的。现在的网络游戏大多数都是tcp,像MMORPG类游戏。我们现在的游戏就是同时用了http和tcp,客户端和游戏服采用http协议。只有多人战斗转向战斗服才采用tcp长链接。 udp:其实游戏是有udp的,在一些高效率的场景下比如pvp即时战斗,tcp的拥塞控制和超时重传并不适合,有些就用的udp,然后自己做丢包重发,拿网络公平性换游戏局部的效率。 现在参与开发的游戏就同时使用了http协议和tcp协议,在游戏服是单机玩法用http协议,战斗服需要长连接保存协议状态,用的tcp。 5.存盘 有数据库就肯定有数据库读写操作,最主要的还是存盘(save),周期存盘还是即时存盘 即时存盘就是每一次操作数据都进行存到数据库,当然这样会导致对数据库的操作过于频繁,毕竟这是效率的瓶颈之一。 周期存盘也叫固定存盘,就是每隔固定时间存盘一次,比如10秒或者15秒,这样数据库的压力就会小很多,当然自己就要在内存中做好数据操作,防止数据污染或者存盘不上导致回档。 MMCloud游戏服务器解决方案图 二.开发一个手机游戏服务器需要掌握的开源技术 1.libevent,boost.asio等网络库,网上有很多开源网络库,与其自己造轮子,不如就用开源网络库作为自己服务器的通讯库。最出名的就属libevent和boost.asio了。 Boost的ASIO是一个异步IO库,封装了对Socket的常用操作,简化了基于socket程序的开发。支持跨平台。 libevent是一个C语言写的事件驱动的开源网络库。 至于二者之间的效率,仁者见仁。 当然还有很多:比如云风写的skynet(c + lua),陈硕写的muduo(c++)。都写得很好,云风写的东西简单好用,陈硕在秀他的c++技术。 2.protobuf:全称Google Protocol Buffers,是google开发的的一套用于数据存储,网络通信时用于协议编解码的工具库。它和XML或者JSON差不多,也就是把某种数据结构的信息,以某种格式(XML,JSON)保存起来, protobuf与XML和JSON不同在于,protobuf是基于二进制的。主要用于数据存储、传输协议格式等场合。 protobuf他的优势是对于传输比较大的数据产生的数据很紧凑很小,可以明显减小传输量。 而且处理速度也比较快,又有各种编程语言的实现,例如C++,Java,PHP等等。 缺点是不能明文编辑(数据是二进制的)。 用protobuf rpc进行数据传输很方便,所以是一个不错的选择。google protobuf只负责消息的打包和解包,并不包含RPC的实现,所以需要自己实现。 3.zeromq:消息队列,一个稳健,简洁的多进程通讯方案的基础。ZeroMQ 并不是一个对socket的封装,不能用它去实现已有的网络协议。它有自己的模式,不同于更底层的点对点通讯模式。它有比 tcp 协议更高一级的协议。(当然 ZeroMQ 不一定基于 TCP 协议,它也可以用于进程间和进程内通讯。)它改变了通讯都基于一对一的连接这个假设。 在这里它更适合服务器与服务器之间的通信,比如逻辑服和战斗服之间进行通信。 4.memcached:一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态、数据库驱动网站的速度。 可以用来做缓存,比如客户端本来每次操作都需要操作数据库,会严重影响效率,这时在中间加一层缓存系统,就提升了性能。基于http协议的通信用memcached是一个不错的选择,如果是tcp长链接,直接维护一个在线的内存对象就可以了。 类似的技术还有redis等。 5.glog/zlog:你肯定需要记录日志,看爱好喽。 6.tcmalloc:内存性能分析 7.distcc:分布式编译工具,之前每次修改代码都要make半个小时,用distcc进行多台电脑同时帮你编译,快很多。 MMCloud拥有超15年游戏运营经验,全球50+ CN2顶级网络,1300+个CDN节点资源,包括并不仅限于中国香港,美国,日本,韩国,新加坡,马来西亚等10多个国家直接CN2高速专线接入。无条件免备案,提供智能化DDOS防护升级,负载均衡优化,数据库集群服务及建议,高防CDN节点布局优化等一系列高品质服务,打造适合企业稳抓客户布局全球的全能型游戏解决方案。详询MMCloud客服QQ95015688 。
-
使用LAMP或LEMP在Ubuntu 16.04服务器上安装Wallabag
Wallabag是一款免费的自托管应用程序,用于保存网页。它是Pocket和Instapaper等其他专有的read later应用程序的开源替代品,允许您管理在互联网上偶然发现的文章列表,以便日后阅读。 袋鼠袋的特点: Wallabag会从你的网页上删除广告和无关内容,只提供文章文本和相关图片,以便阅读。当你在智能手机或平板电脑上查看它们时,这尤其有用。 Wallabag将您的网页保存在数据库中,这样即使原始网页消失,您仍然可以在Wallabag中查看它。 您可以轻松地将所有网页导出为TXT、HTML、CSV、EPUB、MOBI、PDF或JSON文件。 您还可以安装Wallabag浏览器扩展和智能手机应用程序,轻松访问Wallabag。 能够从Firefox和Google Chrome(或Chrome)浏览器导入书签。 本教程介绍如何在Ubuntu 16.04服务器或VPS上托管自己的Wallabag服务。 先决条件 要安装wallabag,您需要具有root权限的用户。 假设您已经在Ubuntu 16.04上设置了LAMP堆栈或LEMP堆栈。Wallabag能够使用PHP运行>;=5.5,包括PHP7。如果您还没有这样做,请查看以下易于遵循的指南。 在Ubuntu 16.04 LTS上安装Apache、MariaDB和PHP7(LAMP Stack) 在Ubuntu 16.04 LTS上安装Nginx、MariaDB和PHP7(LEMP堆栈) 完成后,回到这里继续阅读。 通过SSH登录 以通过SSH创建的新用户(或root用户)身份登录服务器(此处替换用户名和服务器IP地址): 宋承宪新_user@server_IP_address 回答密码提示以完成登录过程。 让我们开始安装Wallabag! 步骤1:为Wallabag创建数据库和用户 Wallabag需要一个数据库来存储网页,在本教程中我们将使用MariaDB/MySQL数据库。运行以下命令以root身份登录到MariaDB/MySQL shell。请注意,这是MariaDB/MySQL根用户,而不是Ubuntu 16.04系统的根用户。 mysql-u root-p 如果看到用户“root@“localhost”错误导致访问被拒绝,则需要禁用unix套接字身份验证。 然后使用以下命令为Wallabag创建一个新数据库。本教程将其命名为wallabag,您可以对数据库使用任何您喜欢的名称。 创建数据库; 接下来,使用以下命令在localhost上创建一个新的数据库用户。同样,本教程将其命名为wallabaguser,您可以使用任何您喜欢的名称。 创建用户wallabaguser@localhost; 为用户设置密码。用首选密码替换密码。 设置密码wallabaguser@localhost=密码(“您的密码”); 然后将新数据库的所有权限授予新用户,以便以后Wallabag可以写入数据库。 授予wallabag的所有特权。*到wallabaguser@localhost由“您的密码”标识; 刷新特权表以使更改生效。 同花顺特权; 退出MariaDB外壳: 出口 在本教程结束时安装完wallabag后,您的网页将存储在wallabag_条目表中。 第2步:安装php7。0-mysql包 关于数据库,我们需要做的另一件重要事情是安装php7。0-mysql包。 sudo apt安装php7。0-mysql php7。0-mysql包提供pdo_mysql驱动程序,wallabag将使用该驱动程序连接到MariaDB/mysql数据库,否则wallabag无法连接到该数据库。如果您将PHP作为Apache模块运行,那么在安装包后,必须重新启动Apache Web服务器,以便启用驱动程序。 sudo systemctl重启apache2 如果您使用php7运行PHP。0-fpm,则无需重新启动Apache或php7。0-fpm。pdo_mysql驱动程序将在安装后自动启用。 如果您不确定是使用Apache模块还是php7。0-fpm,然后创建一个测试。文档根目录下的php文件(默认情况下为/var/www/html)。 sudo nano/var/www/html/test。php 然后将以下PHP代码粘贴到文件中。 <;?php phpinfo()>; 按Ctrl+O保存文件,然后按Ctrl+X退出。现在在浏览器地址栏中,输入 服务器ip地址/测试。php 用实际ip替换服务器ip地址。您应该可以看到服务器的PHP信息。如果服务器API的值是Apache2.0 Handler,那么您使用的是PHP7。0作为Apache模块。如果该值为PHP7。0-FPM,则PHP作为FPM服务运行。 步骤3:安装Wallabag 我们将使用git工具从Github克隆Wallabag存储库,然后使用Composer安装Wallabag。因此,使用以下命令在Ubuntu 16.04上安装git: sudo-apt-install-git 然后克隆Wallabag存储库并将工作目录更改为存储库。 git克隆https://github.com/wallabag/wallabag.gitcd袋 Wallabag(2.1.2)的最新版本于2016年10月17日发布。使用git checkout命令切换到2.1.2版。 git checkout 2.1.2 在安装Wallabag with Composer之前,我们需要确保Ubuntu 16.04上安装了以下PHP扩展。 sudo apt安装php7。0-bcmath php7。0-XMLPHP7。0-zip php7。0-卷曲php7。0-Mb字符串php7。0-gd 接下来,我们需要安装Composer,它是PHP的依赖项管理器。它将为我们下载并安装所有必要的Wallabag依赖项。 sudo-apt-install-composer 现在设置Symfony变量并使用以下命令安装Wallabag。SYMFONY_ENV=prod告诉SYMFONY我们正在生产环境中安装Wallabag。--no dev标志确保生产环境中没有安装开发包。 SYMFONY_ENV=prod composer安装——无开发-o——首选dist 在安装过程中,composer将下载并安装所有需要的依赖项。 之后,将要求您提供缺少的参数,以便app/config/parameters。可以创建yml文件。Composer已经提供了一些默认值,但它们不能用于生产服务。 为了简单起见,让我们把问题分成两部分。第一部分是关于数据库参数。以下是本教程提供的问题和参数。 正在创建“app/config/parameters.yml”文件,缺少一些参数。请提供它们。database_driver(pdo_sqlite):pdo_mysql database_host(127.0.0.1):127.0.0.1 database_port(null):3306 database_name(symfony):wallabag database_user(root):wallabaguser database_password(null):您的密码数据库_路径('%kernel.root_dir%/../data/db/wallabag.sqlite'):/var/lib mysql/wallabag database_table_table_前缀(wallabag):wallabag)_ 第一个问题是什么数据库驱动程序,也就是说,你想为Wallabag使用什么数据库。默认驱动程序是pdo_sqlite,这意味着sqlite数据库将用于存储网页。本文将使用MariaDB/MySQL,因为它们速度快,是最流行的开源关系数据库管理系统。在本文开头,我们已经启用了pdo_mysql驱动程序。所以输入pdo_mysql作为第一个问题的答案。 其他问题很容易回答。输入127.0.0.1作为数据库主机,3306作为数据库端口,因为默认情况下,MariaDB/MySQL数据库将监听127.0.0.1:3306。然后输入在步骤1中创建的数据库名称、数据库用户和数据库用户密码。MariaDB/MySQL的默认数据库路径是/var/lib/MySQL。所有数据库和表都存储在此目录下。数据库表前缀可以帮助您识别这些表是为Wallabag准备的。 现在在第二部分中,只需按Enter键即可使用默认值。 mailer_传输(smtp):mailer_主机(127.0.0.1):mailer_用户(null):mailer_密码(null):区域设置(en):秘密(ovmpmawxrcabnlmgzzlzfxdymcfzgv):twofactor_auth(true):twofactor_发送者(电子邮件和#160;受保护的]):fosuser_确认(true):来自电子邮件([电子邮件和#160;受保护的]): 完成后,运行以下命令。 php-bin/console-wallabag:install--env=prod 它将检查系统需求并建立数据库。当它询问您是否要重置数据库时,按n键回答否。然后会要求您创建一个管理员用户。 安装袋鼠袋。。。第1步,共5步。检查系统要求。+--------------+-------------+-------------+|已选中|状态|建议|+-------------------+------------------+-------------+| PDO驱动程序|好!| | |卷曲|执行|好!| | |卷曲|多重|初始|好!成功!你的系统可以正常运行。第2步,共5步。建立数据库。您的数据库似乎已经存在。你想重置它吗?(是/否)N创建架构清除缓存第3步,共5步。管理设置。是否要创建新的管理员用户(推荐)?(Y/n)Y用户名(默认值:wallabag):您的管理员用户名密码(默认值:wallabag):管理员密码此处电子邮件:管理员电子邮件此处第4步,共5步。配置设置。第五步,共五步。安装资产。Wallabag已成功安装。使用wallabag只需执行'php bin/console server:run--env=prod':http://localhost:8000 第2步将创建wallabag数据库表。完成后,我们将wallabag目录移动到/var/www/。 cd~sudo mv~/wallabag//var/www/ 然后将Apache用户(www数据)设置为所有者。 sudo chown www-data:www-data/var/www/wallabag-R 第4步:设置Apache虚拟主机 为Wallabag创建虚拟主机配置文件。 sudo nano/etc/apache2/网站可用/wallabag。形态 如果将PHP用作Apache模块,则将以下文本复制并粘贴到配置文件中。换个袋子。实例使用你自己的域名。您还应该在DNS中将域名指向Ubuntu 16.04服务器的IP地址。 <;虚拟主机*:80>;服务器名:wallabag。埃克斯马普尔。com服务器是一个小袋子。实例com DocumentRoot/var/www/wallabag/web<;目录/var/www/wallabag/web>;允许无订单允许,拒绝所有订单允许<;如果模块mod_重写。c>;选项-重写条件%{REQUEST_FILENAME}上的多视图重写引擎-f重写规则^(.*)$app。php[QSA,L]</IfModule></目录>;#如果您将资产安装为符号链接,或者在编译LESS/Sass/CoffeScript资产时遇到问题,请取消注释以下行#<;目录/var/www/wallabag>;#选项如下SymLinks#</目录>;#可选地禁用资产目录的重写引擎#,这将允许apache在文件#未找到时简单地用404回复,而不是将请求传递到完整的symfony堆栈<;目录/var/www/wallabag/web/bundles>&书信电报;如果模块mod_重写。c>;发动机关闭</IfModule></目录>;ErrorLog/var/log/apache2/wallabag_错误。日志CustomLog/var/log/apache2/wallabag_访问。日志合并</VirtualHost>; 如果希望使用php7运行PHP,上述配置将PHP用作Apache模块。0-fpm,然后在CustomLog下面添加ProxyPassMatch规则。 ..... CustomLog/var/log/apache2/wallabag_访问。日志组合ProxyPassMatch^/(./.php(/.*)$unix:/run/php/php7。0-fpm。袜子|fcgi://localhost/var/www/wallabag/web/</VirtualHost>; 保存并关闭文件。在上面的配置中,我们使用Apache重写模块重写URL。我们需要通过运行以下命令来确保mod_rewrite已启用,以便URL重写工作正常,并且可以正确显示Wallabag前端。 sudo a2enmod重写 然后通过创建符号链接来启用该虚拟主机。 sudo ln-s/etc/apache2/sites available/wallabag。conf/etc/apache2/sites已启用/ 要使上述更改生效,请重新启动Apache。 sudo systemctl重启apache2 现在你应该可以在Wallabag上访问你的Wallabag web界面了。实例com和登录。 设置Nginx服务器块文件 创建文件。 sudo nano/etc/nginx/conf.d/wallabag。形态 将以下文本复制并粘贴到配置文件中。换个袋子。实例使用你自己的域名。您还应该在DNS中将域名指向Ubuntu 16.04服务器的IP地址。 服务器{server_name wallabag.example.com;root/var/www/wallabag/web;location/{#尝试直接提供文件,回退到app.php try_files$uri/app.php$is_args$args;}位置~^/app/。php(/|$){fastcgi_pass unix:/run/php/php7.0-fpm.sock;fastcgi_split_path_info^(+/.php)(/.*);包括fastcgi_参数;fastcgi_参数脚本文件名$realpath_root$fastcgi_脚本_名称;fastcgi_参数文档_root$realpath_root;内部;}错误日志/var/log/nginx/wallabagu错误。日志访问日志/var/log/nginx/wallabagu访问。日志;} 保存并关闭文件。然后重新加载Nginx,以便启用服务器块。 sudo systemctl重新加载nginx 现在你应该可以在wallabag上访问你的wallabag web界面了。实例com和登录。 设置基本SMTP服务器 请注意,为了注册新用户,您的Ubuntu 16.04服务器需要运行SMTP服务器,以便向新用户发送确认电子邮件。你可以使用后缀来达到这个目的。 sudo-apt-install-postfix 在安装过程中,它会要求您为Postfix选择一种配置类型。选择Internet站点,以便Postfix可以向Internet上的其他SMTP服务器发送电子邮件。 在系统邮件名称字段中,输入类似wallabag的内容。你的领域。通用域名格式。 现在我们终于完成了,可以开始保存网页了。干杯 我希望本教程能帮助你用LAMP或LEMP在Ubuntu 16.04服务器上安装Wallabag。一如既往,如果你觉得这篇帖子有用,请订阅我们的免费时事通讯,或者在谷歌+、推特或Facebook页面上关注我们。