首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    12 经典游戏服务器端架构概述

    现代电子游戏,基本上都会使用一定的网络功能。从验证正版,到多人交互等等,都需要架设一些专用的服务器,以及编写在服务器上的程序。因此,游戏服务器端软件的架构,本质上也是游戏服务器这个特定领域的软件架构。 软件架构的分析,可以通过不同的层面入手。比较经典的软件架构描述,包含了以下几种架构: 1.运行时架构——这种架构关心如何解决运行效率问题,通常以程序进程图、数据流图为表达方式。在大多数开发团队的架构设计文档中,都会包含运行时架构,说明这是一种非常重要的设计方面。这种架构也会显著的影响软件代码的开发效率和部署效率。本文主要讨论的是这种架构。 2.逻辑架构——这种架构关心软件代码之间的关系,主要目的是为了提高软件应对需求变更的便利性。人们往往会以类图、模块图来表达这种架构。这种架构设计在需要长期运营和重用性高的项目中,有至关重要的作用。因为软件的可扩展性和可重用度基本是由这个方面的设计决定的。特别是在游戏领域,需求变更的频繁程度,在多个互联网产业领域里可以说是最高的。本文会涉及一部分这种架构的内容,但不是本文的讨论重点。 3.物理架构——关心软件如何部署,以机房、服务器、网络设备为主要描述对象。 4.数据架构——关心软件涉及的数据结构的设计,对于数据分析挖掘,多系统协作有较大的意义。 5.开发架构——关心软件开发库之间的关系,以及版本管理、开发工具、编译构建的设计,主要为了提高多人协作开发,以及复杂软件库引用的开发效率。现在流行的集成构建系统就是一种开发架构的理论。

    09

    服务器处理连接的架构演变

    服务器是现代软件中非常重要的一个组成。服务器,顾名思义,是提供服务的组件,那么既然提供服务,那就要为众人所知,不然大家怎么能找到服务呢?就像我们想去吃麦当劳一样,那我们首先得知道他在哪里。所以,服务器很重要的一个属性就是需要发布服务信息,服务信息包括提供的服务和服务地址。这样大家才能知道需要什么服务的时候,去哪里找。对应到计算机中,服务地址就是ip+端口,但是ip和端口不容易记,不利于使用,所以又设计出DNS协议,这样我们就可以使用域名来访问一个服务,DNS服务会根据域名解析出ip。解决了寻找服务的问题后,接下来的问题就是服务器如何高效地处理连接。本文介绍服务器处理连接的架构演进。

    04

    惊群效应

    传统的服务器使用“listen-accept-创建通信socket”完成客户端的一次请求服务。在高并发服务模型中,服务器创建很多进程-单线程(比如apache mpm)或者n进程:m线程比例创建服务线程(比如nginx event)。机器上运行着不等数量的服务进程或线程。这些进程监听着同一个socket。这个socket是和客户端通信的唯一地址。服务器父子进程或者多线程模型都accept该socket,有几率同时调用accept。当一个请求进来,accept同时唤醒等待socket的多个进程,但是只有一个进程能accept到新的socket,其他进程accept不到任何东西,只好继续回到accept流程。这就是惊群效应。如果使用的是select/epoll+accept,则把惊群提前到了select/epoll这一步,多个进程只有一个进程能acxept到连接,因为是非阻塞socket,其他进程返回EAGAIN。

    041
    领券