精华内容
下载资源
问答
  • 常用服务器端开发语言
    千次阅读
    2021-04-01 20:53:23

    1,团队沟通

    基本上不管做什么开发,都是一个团队来完成的,游戏也是如此,游戏团队一般由老板,总经理,CTO(技术主管),主策划(领导一些人,包括数值策划,系统策划,特效策划),主美(领导一些人,包括原画,UI设计,特效动作设计),客户端主程(领导一些人,客户端程序员,客户端程序员...),服务器主程(领导一些人,包括服务器程序员,服务器程序员),外加运维。而游戏的大部分逻辑实现与逻辑数据验证都会放在服务器端,所以服务端程序需要明确了解策划的需求,要了解就需要沟通,沟通方式的正确与否,直接关系到功能的实现是否正确,由于游戏逻辑的复杂性,单纯的文档描述可能不会非常完整,不像其它行业需求文档就几百页,详细的图文并茂,制定好之后也很少变化。所以做为一名游戏程序员,一定要有良好的沟通方式和技巧。

    2,架构设计

    这个架构设计就像盖房子打基础,基础好,房子就稳固,基础不好,房子高了就容易倒。架构设计需要结合软件工程学来搞,它需要对服务器的整个流程有足够的了解,对需求的变化有足够的认识。架构的设计一般有几个特性。

    首先是易用性,架构一旦完成,在开发的时候就要方便使用,比如网络通信架构,设计好之后,其他开发者就不需要关心客户端的数据是怎么被传输到服务器端的,这个时候对于服务器开发者来说,只需要实现一些简单的接口,就可以直接对客户端发送来的请求进行处理操作。再比如说服务器端数据的存储与更新,开发者只需要写少量SQL语句或基本不用写,都由架构的底层代码完成,开发者只需要调用封装好的API,就可以把数据存入数据库而不用关心数据的最终流向,只需要关心实现逻辑就可以了。

    第二,可扩展性,可扩展性包括两个方面,一是代码的可扩展性,比如说游戏中的任务处理吧,一个游戏中任务可能有几十种,而且还可能不定时的增加,为了判断不同的任务类型该执行什么操作,最简单也是最差的写法是if else,想象一下,一个方法里面,有几十个if else,这简单是bug的理想诞生地呀。一种可行的做法是使用责任链模式(具体的请参考设计模式的实现),这样每种任务都有一个单独的类去处理它,而不会影响其它的类,符合开闭原则,相互关联少,越少越不容易出bug。二是部署的可扩展性,比如,如果在线人数突然增加或预期可能要增加,一台物理机器可能处理不过来这么多的请求,那怎么办?那就需要支持在不影响其它服务器运行的情况下,可以动态的添加机器。而当压力降低之后,又可以移除某些机器,合理利用资源。

    第三,高吞吐量,这个是指能尽量最大化的利用计算机固定的资源,去处理更多的请求,更快速的响应客户端。这就需要在服务器架构设计的时候考虑异步处理,减少IO等待时间(比如请求Redis,存储数据库,和其它服务器通信)以及数据缓存。说到异步,一定会涉及到多线程,并发等相关的技术,所以架构设计的时候需要对这部分知识有足够的了解。

    第四,要考虑是否所有的功能模块都放在同一个进程中。也就是需不需要分布式开发,哪些功能需要单独拿出来。对于手机游戏来说,一般要求同时在线量比较小,功能比较单一,所有功能都在一个进程中,人数大量同时在线时,可以多部署几组进程。而对于大型网页游戏或客户端游戏来说,特别是有些大区或不分区的情况,单个功能访问量大,服务器就要考虑分布式部署开发了。

    架构设计一般需要有经验的开发者(项目主程)去搭建,新手可以做为了解,在接触到项目之后,可以按这个思路去理解项目的架构是怎么样构成的,如果让自己来做,能否模仿出来,有时间可以自己尝试去独立设计架构,锻炼自己的能力,有一天你是会实际去做的。

     

    3,逻辑开发

    架构搭建完成之后,紧接着就是游戏服务器的逻辑开发,这时才开始真正去实现游戏需要的内容,比如注册,登陆,任务,活动,背包,组队战斗等。由于游戏逻辑可能需要的判断条件多,组合变化多,所以在游戏逻辑开发过程中,你会慢慢发现面向对象的重要性。逻辑开发是一个任重而道远的过程,同一个问题,可能有很多种实现方式,不同的实现方式对效率和吞吐量有很大的影响,所以就需要对需求功能的理解要深入,不同功能之间的关联要明确。对常用的设计模式要知道如何使用。比如像上面说的替换数量比较多的if else的方式。逻辑开发需要谨慎细心,而且一定要自己测试才可以,不然bug在不知不觉中就产生了。

    4,系统周边开发

    一个游戏成功的运营,需要很多服务去支持它,比如sdk接入,充值接入,日志统计,游戏运行管理系统(一般叫后台管理系统,是内部人员为了管理游戏的而开发的系统)。比如修改某个用户的等级,封号等。管理系统一般会用web开发,与游戏服务器通信。

     

     

    二,游戏类型与技术选择

    游戏服务器开发使用的技术取决于游戏的类型,不同的游戏类型,需要的游戏环境不一样,所使用的技术也不一样。但是在本质上都是一样的,都是面对数据,处理数据,不同的是面对的数量大小而已。http://www.youxijishu.com

    1,PC类端游

    这类游戏在线人数庞大,游戏中要处理的数据也非常庞大。所以对服务器性能要求非常高,一般都是采用C++做为开发语言,C++可以直接操作内存数据,与操作系统直接交互,减少数据之间的复制,它运行效率高,处理速度快,是这类游戏开发的首选开发语言。服务器端采用分布式架构,把不同的模块分散在多台物理机上处理。需要学习的大致有C++编程,Linux网络编程、TCP/IP通讯协议、多线程编程再加数据库。它一般开发周期比较长,一个游戏的上线基本上需要三到五年。

    2,网页游戏

    这类游戏相对于端游来说,开发周期短,因为是网页游戏,游戏的界面展示依赖于网络传输,所在在画面和特效上会次于客户端游戏很多。游戏的特点主要集中在游戏的玩法上。但是对于服务器端来说,和端游类是差不多是一样的,有些公司之前是做端游的,他们就直接把端游的服务器架构拿来就可以使用,以完成快速开发。

    3,手机游戏

    手机类游戏目前是最火最热门的游戏,因为他的用户量大,用户占有时间长。但是手机游戏大多数是一般小游戏,功能简单,玩法单一,一般都是休闲娱乐的。现在也有一些稍微大型的MORPG游戏。所以手机游戏开发周期更短,上线更快。

    目前,游戏市场竞争激烈,当前服务器主流的开发语言是C++和Java,但是C++学习难度大,开发速度慢。为了满足游戏服务器快速开发,快速上线,所以一般来说我们都是使用Java语言来开发服务器。近年来,随着游戏市场的发展,游戏服务器开发技术因Java而生成了一套体系。可以供开发者选择。

     

    三,使用Java开发服务器需要学习什么

    Java语言,由于学习成本低,开发速度快,稳定性高,开源框架多,目前已成为网页游戏和手机游戏服务器开发的主要语言。咱们从系统的开发流程简单梳理一下服务器开发需要用到的技术。

    1,网络通信

    这个是首要实现的,如果没有网络通信,就没有服务器存在的必要了。网络通信就需要建立网络连接。目前网络通信有两种方式,一种是短连接,比如http,一种是长连接,比如socket,当然http也是基于socket的,socket是通信的基础。所以要对tcp/ip通信的知识有所了解,明白通信的原理。基于这两种网络通信,游戏服务器也分为两种,弱联网和强联网。弱联网的游戏一般是指一些小型的游戏,比如开心消消乐,连连看,以及一些卡牌养成类游戏,这类游戏一般几秒钟或几分钟再会与服务器同步一次数据,一般会使用短连接。而像一些arpg游戏,实时战斗类游戏,以及带同屏显示玩家的游戏,这类游戏与服务器交互信息频繁,一秒钟可能几十次,会采用长连接,避免每次连接重新建立消耗系统资源,提高通信效率。

    为了网络通信的效率,服务器要使用NIO(非阻塞网络通信)通信。它能支持大并发连接。Java NIO是多路复用IO,在多路复用IO模型中,会有一个线程不断去轮询多个socket的状态,只有当socket真正有读写事件时,才真正调用实际的IO读写操作。因为在多路复用IO模型中,只需要使用一个线程就可以管理多个socket,系统不需要建立新的进程或者线程,也不必维护这些线程和进程,并且只有在真正有socket读写事件进行时,才会使用IO资源,所以它大大减少了资源占用。目前基于此技术有很多开源框架,最常用的有两种,Netty和Mina。

    所以在网络通信这一块,如果是弱联网游戏,可以使用web那一套来开发游戏服务器,需要学习的技术一般有http原理,Json格式协议,servlet,Tomcat(也可以是其它web容器),spring等。如果是强联网游戏,要学习的技术有Netty或Mina可以选择一种,多线程以及线程池的应用。这是网络通信所必须掌握的。只要能把客户端发送的信息接收到,并解析成代码使用的明文,就是成功了一半了,剩下的事就是把代码封装好,方便逻辑开发调用!

    通信这块还要考虑消息的并发,长连接情况下,怎么处理断包,粘包问题,每个用户的消息处理的是不是有序的,如果有序会不会阻塞消息,如果无序会不会造成处理混乱,比如后到的消息先处理了,这些问题都要处理好,目前一般是保证同一个用户的消息要有序处理!

    2,数据存储

    网络通信调试好之后,不要急着做逻辑开发,还需要把数据如何存储理清楚!因为服务器端操作的全是数据,如果处理的不好,容易出bug,丢数据,这对游戏玩家来说是致命的,不可接受的!数据存储要考虑,一,数据如何存到数据库,是同步存储,还是异步存储!同步存储即将数操作完之后立刻写入数据库,异步操作即数据操作完之后先存储到内存缓存,然后由另外的线程或进程再同步到数据库!游戏中一般都是采用的异步存储方式,因为游戏并发量大,必须低延时,快速响应客户端!如果直接操作数据库太慢,会造成消息阻塞!内存缓存可先择的框架有redis,memcache,具体怎么同步到数据库,需要自己去设计了!二,数据接口如何设计,能不能用工作生成这些数据操作的代码,能不能不用写SQL语句,需是封装在底层,或由工具生成。编程是门艺术,在这就体现出来了,当然是仁者见仁,智者见智了!三,大并发情况下数据的一致性,像这类可能多线程操作的数据,一般是放在内存中,由锁来控制并发!所以对锁的使用要熟悉,不要出现死锁,或锁粒度过大,造成线程的长时间等待的情况!四,当数据量太大,一个数据库存储不了,数据该怎么分库分表!一种是水平划分,一种是垂直划分!具体的划分方式其它资料已有详细介绍,请自行查找阅读!目前有一个开源的分库框架mycat,是用JAVA写的,大家可以研究一下!

    3,逻辑开发

    逻辑开发就是实现游戏策划想象的各种游戏功能,比如,登录,物品使用,战斗结算等!逻辑开发代码量巨大,相互之间有很紧密的耦合性,所以每个功能模块一定要划分好!最好是接触下单元测试,写之前考虑一下是否方便单元测试,这样设计的代码会更加清晰,每个方法责任明确,不容易出bug!正是因为逻辑代码复杂,为了更好的管理代码,前辈们给我们总结了一些经验,就是著名的设计模式,所以学习一下设计模式对代码的管理有很大的好处!

    逻辑开发一般遇到的问题有:

    3.1,数据同步

    一说到数据同步或资源共享的时候,一般都会考虑到锁的使用。因为一份资源同时只能被一个线程访问才是安全的。Java的JDK中提供了一些锁,比如:synchronized,以及java.util.concurrent.lock包中的Lock对象,java.util.concurrent包中还提供了其它的一些原子操作的类,我们知道i++操作不是线程安全的,但是可以使用AtomicInteger中的getAndIncrement();方法代替,还有线程安全的ConcurrentHashMap哈稀Map。以及阻塞队列LinkedBlockingQueue等。都是逻辑开发中常用的处理数据同步的类。

    3.2,设计模式的使用

    使用设计模式,可以让代码更加清晰,可扩展性更强,维护性更佳,比如,任务系统,任务会有很多种类型,要获得任务数据时,在一开始写这个系统的时候,我是这样写的if(type == 1)做什么,else if(type == 2)做什么,else if(type == 3)......else if(type == 35) else等。如果需要添加新的类型,又要添加else,这些if else都在同一个方法中。最后都不敢动一块,就怕出bug。其实当一个方法中出现三个以上的if else将来还可能增加时,就应当考虑设计是不是有问题了,后来改成责任链模式或状态模式,就解决了这个问题。还有一个例子是,当一个值变化,要影响多个任务完成状态时,可以使用观察者模式或监听模式或订阅模式去实现,这样功能之间完全解耦,出问题的机率会很小很小。

    3.3,数据缓存框架的API使用

    目前主流使用的数据缓存框架有redis和memcache,虽然在逻辑开发前,主程会对这些进行一些封装,但是作为使用者还是需要对这些框架的客户端的使用要有所了解的。这些可以去阅读相关的文档。不是太难。

    4,程序部署与运行

    目前,大多数Java项目都采用maven管理 ,可以使用maven打包开发好的程序,程序一般运行在远程服务器上,比如云服务器。一般运行Java程序的远程服务器都是linux系统,需要使用Linux命令操作,或写一些shell脚本去自动化部署管理一些程序。

    5,艰苦奋斗的精神

    首先,一定要让自己对这一行有兴趣,明确自己在这一行的技术选择,人生选择。很多人都知道,程序员加班是常有的事,坚持的住就做,坚持不了就再换一家公司做。

     

    综上所述,想做Java游戏服务器方面的开发要掌握的技术有以下一些:

    1,网络通信框架,Mina或Netty必须熟悉一种。而且自己必须要亲自搭建过,并明白其它原理。

    2,通信协议制定和处理断包粘包,这一般属于网络通信框架要解决的问题。

    3,数据缓存框架,redis或memcache选择一个,能熟练使用其客户端的命令。

    4,Java基础,java NIO通信原理,Java集合的使用,Java多线程开发,Java锁的使用

    5,了解一些设计模式。最好能把23种设计模式都看一遍,并结合自己的开发经验,看哪些可以用到设计模式,但也不能死套设计模式,要灵活运用。

    6,熟悉使用MySQL数据库

    7,了解数据库连接池的一些框架,比如Mybatis,hibernate

    8,对Http协议熟悉,熟悉一种web容器,比如tomcat,了解其配置。

    9,对常用的一些Linux命令要熟悉使用。

    10,热爱学习,不断的充实自己,上面所说的只是入门技能而已,真正做起来要复杂的多,一定要让自己喜欢游戏这个行业,这样才能有动力做下去,做自己喜欢的工作还是比为了工作要好的!

    更多相关内容
  • Java常用技术

    千次阅读 2022-05-07 18:05:03
    当然,您也可能会被 Java 在软件开发中的流行和垄断所吸引,并且您可能希望在您的下一个 Web 开发解决方案中使用 Java 编程语言。Java编程语言的优点有很多,大家以后就会慢慢了解。 Java 让您可以处理复杂的应用...

            世界各地的每个人仍然对 Java 在 Web 和移动开发中的惊人力量感到惊讶。当然,您也可能会被 Java 在软件开发中的流行和垄断所吸引,并且您可能希望在您的下一个 Web 开发解决方案中使用 Java 编程语言。Java编程语言的优点有很多,大家以后就会慢慢了解。

            Java 让您可以处理复杂的应用程序解决方案,例如计票投票、航班预订 API、酒店预订、预订系统等。但是,您不知道开发复杂或简单的 Web 应用程序需要哪些 Java 技术?

            在 Java 一词下有多种技术以各种方式描述 Web 开发。在本节中,我们讨论了可用于构建 Web 应用程序的 Java 技术。无论您是全栈开发人员、后端或前端开发人员,还是企业主,了解这些技术对于理解应用程序流程至关重要。

            ​Java Web 开发与什么相关联?该术语被定义为使用 Java 技术的网站开发过程。用 Java 可以清楚地理解 Web 开发的科学。不过,在此之前,您需要了解 Web 应用程序的概念。Web 应用程序是可以在多台计算机上运行并建立网络或服务器连接的分布式应用程序。此外,这些应用程序仅在 Web 浏览器中运行,并且在将浏览器用作用户客户端时很容易识别它们所提供的功能。

            当我们创建 Web 应用程序时,我们不需要在不同的计算机或您客户的计算机上安装额外的软件来运行这些应用程序,因为他们使用浏览器作为用户客户端。此外,企业还可以更新和维护Web应用程序,而无需处理更新和维护应用程序解决方案的任何麻烦。此外,我们可以将这些网络应用程序用于在线零售、网络邮件、网络博客、网上银行、聊天板等。总之,数百万用户可以同时访问一个 Web 应用程序,使其更受欢迎。因此,Java 开发工具受到企业的青睐。

            现在,让我们看看可以用来创建 Web 应用程序的 Java 技术。我们需要确保在您的系统上安装了这些技术才能使用 Java。此外,服务器必须有一个内置容器或 Web 服务器,可以检测和运行您创建的类。

    1.Java Servlet API

            Java Servlet 是 Java 的第一个服务器端 Web 技术,它使您能够定义特定于 HTTP 的类。servlet 类扩展了服务器的能力和能力并托管应用程序。可以使用请求-响应编辑模型访问这些应用程序。

            尽管 servlet 可以响应任何请求,但使用 servlet 的主要目的是扩展 Web 服务器托管的应用程序。例如,您可以使用 servlet 从在线应用程序获取数据输入,甚至可以将其扩展为显示在屏幕或 HTML 页面上。此外,您可以使用 servlet 将数据写入数据库或文件。servlet 在服务器端工作,没有应用程序 GUI 或 HTML。

    2. Java 服务器页面技术

            Java Server Pages (JSP) 技术在开发人员中非常流行,它提供了一种简单快捷的方法来改进动态 Web 内容。它导致 Web 平台和独立 Web 应用程序的快速发展。此外,您可以将一段 servlet 代码添加到应用程序的文本文档中,使 JSP 对开发人员友好。此外,JSP 页面是基于文本的文档,包括两种类型的文本:

            可以以任何文本格式(包括 XML、HTML 或 WML)表示的静态数据。JSP 技术完全决定了网页上的动态内容创建。

            用于 JSP 页面构建的包是 javax.servlet.jsp、javax.el、javax.servlet.jsp.tagexta 和 javax.servlet.jsp.el。但是,您需要直接导入它们。使用 JSP,可以很容易地创建一个带有剪断 JSP 代码和扩展的 Web 应用程序。

            您可以通过使用单个标题并将它们插入到描述站点导航的 header.html 文件中来开发具有 JSP 技术页面的网站。要更改按钮或链接,您需要对一个文件进行更改,它将自动重定向到整个站点。

            正因为如此,Java 程序开发公司声称 JSP 是用于创建强大的 Web 内容(如表单、调查等)的最佳技术。

    JavaServer Pages 标准标签库

            JavaServer Pages 标准标记库 (JSTL) 集成了许多基于 JSP 的应用程序共有的核心功能。您无需在应用程序中混合来自多个供应商的标签,而是使用一组通用标签。此配置允许您在任何支持 JSTL 的 JSP 容器上运行应用程序,并且更有可能改进标记实现。

            JSTL 具有用于控制流控制的重复标记和条件标记、XML 文档解密标记、全局标记、使用 SQL 的网站访问标记以及常用的函数标记。可以使用 JSTL 访问的包是 javax.servlet.jsp.jstl.core、javax.servlet.jsp.jstl.fmt、javax.servlet.jsp.jstl.sql 和 javax.servlet.jsp.jstl。tlv。

    3. JavaServer Faces 技术

            JavaServer Faces Technology (JSF) 是一个 UI 框架,允许您创建 Web 应用程序。GUI 组件框架是 JavaServer Faces 技术的主要组件之一,它以各种标记语言和其他技术呈现组件。它还具有用于创建 HTML 标记的 RenderKit。Java API 和 XML 配置文件支持此功能。此外,它在 Sun Java Studio Creator IDE 中的 GUI 拖放工具有助于在不编写或理解部分代码的情况下使用技术。

    4. JDBC API

            Java 数据库连接 (JDBC) API 非常流行,大多数开发人员都了解 JDBC 对于 Web 应用程序开发的重要性,因为它允许您在 Java 应用程序中请求 SQL 数据库命令。此外,没有任何特殊限制,因为您可以在 servlet、JSP 页面或企业​​ bean 中请求 JDBC API。JDBC 由两个组件组成,一个是应用程序级接口,另一个是服务提供者接口。应用级接口用于通过应用组件访问数据库,服务器提供者将JDBC驱动集成到Java企业平台中。

    5.Java消息服务API

            您已经知道发送消息的重要性,无论是在人与人之间,还是在软件或应用程序的各个部分之间。在整个软件程序中,消息传递系统是以点对点为中心的。简而言之,消息传递客户端向接收客户端发送消息并接收来自其他客户端的消息。

            在这种情况下,每个客户端都连接到一个消息代理,该代理协助创建、发送、接收和读取消息。Java Messaging Service API是一个Java技术平台,它解决了客户端之间的通信问题并达到了它的目的。企业消息传递为整个企业的数据交换提供了一种灵活、可靠的方式。JMS API 扩展了此功能并添加到提供程序框架中,以提供 Java 语言中可移植消息传递应用程序的开发。此外,您将如何使用 JMS 是一个感知问题。一种方法是使用它来保持创新的监控。

    6.用于XML处理的Java API

            XML(Extensible Markup Language)处理是Java Web开发中的一个重要过程。Java API for XML Processing (JAXP) 使用文档对象模型 (DOM)、Simple API for XML (SAX) 和 XSLT API(可扩展样式表语言转换)来支持它。JAXP 提供 XML 文档的应用程序分析和转换,而无需任何 XML 处理功能。

            它还提供命名空间支持,允许您的应用程序使用冲突的单词方案。它是高度可定制的,允许您在应用程序中使用符合 XML 和 XSL 的处理器,并支持 W3C 模式。

    7. Java 命名和目录接口 (JNDI)

            随着名称的提升,它提供了命名和目录功能,使应用程序能够访问多个命名服务和目录服务。此外,它还为应用程序提供了可以执行常见目录操作(如对象搜索、属性关联等)的方法。此外,使用 JNDI,可以存储和检索各种类型的命名 Java 技术对象,从而允许应用程序与许多遗留应用程序和系统共存。对 JNDI 命名环境的访问由命名服务提供给应用程序客户端、Web 组件和企业 bean。

            此外,开发人员可以使用命名环境自定义组件,而无需更改或访问组件的源代码。

    8.Java持久化API

            Java Persistence API (JPA) 使用对象关系映射将面向对象的模型链接到数据库。Java 应用程序中的关系数据可以通过 Java Persistence 轻松管理。它有助于从数据库中连续存储或检索大量数据。

            您不必使用过多的代码、专有框架等。为了连接到站点,JPA 将为您提供一种使用对象关系方法与站点进行通信的简单方法。JPA 是可以将您连接到数据库的有效类和方法的集合。

    9. JavaMail API 和 JavaBeans 激活框架

            Web 应用程序可以使用 JavaMail API 发送电子邮件通知。API 由两部分组成:程序组件用于发送电子邮件的应用程序级接口和服务提供商的接口。服务提供商使用一些电子邮件协议,例如 SMTP(简单邮件传输协议)。JavaMail API 包中包含了几个服务提供者,有些是单独提供的。Java EE 论坛包含一个带有服务提供者的 JavaMail 扩展,该服务提供者允许部分应用程序发送电子邮件。

            通过与 JavaMail 扩展集成,您可以使用 JavaBeans Activation Framework (JAF) API。该 API 提供标准服务来确定不正确数据的类型、编译对其的访问、定位对其可用的服务,并基于 JavaBeans 组件(JavaBeans 组件)的创建创建适当的组件来执行这些任务。

    其他 Java 技术

    在 Web 应用程序中使用以下其他技术,具体取决于应用程序的复杂性

            J2EE 连接器架构:工具供应商和系统集成商使用这个平台来创建支持访问业务信息系统的服务适配器,这些系统可以链接到任何基于 Java EE 技术的产品。

            Java 身份验证和授权服务 (JAAS): JAAS 提供了一个基于 Java EE 技术的应用程序,用于对特定用户或用户组进行身份验证和授权来实现它。

            XML Registries (JAXR) 的 Java API: JAXR 允许您访问 Web 上的商业注册和一般用途。

            XML 绑定的 Java 架构 (JAXB): JAXB 提供了一种将 XML 模式集成到用 Java 编程语言编写的应用程序中的表示的简单方法。

            SOAP with Attachments API for Java (SAAJ): SAAJ 是 JAX-WS 和 JAXR 所依赖的低级 API。

            Java Transaction API (JTA): JTA 为设计任务提供了标准的可视化界面。

            Java Beans: JavaBeans 类将几个元素组合成一个称为 bean 的组件。JavaBean 是一个应可序列化的类,具有无参数构造函数,还应提供设置或获取属性值的方法。

            Net Beans IDE: NetBeans 是一个开源、免费的集成开发平台,适用于使用 Java 的 Web、移动或桌面应用程序。它为开发周期提供完整的集成支持,即从创建到分析、纠错和部署。

    Java学习视频

    Java基础:

    Java300集,Java必备优质视频_手把手图解学习Java,让学习成为一种享受

    Java项目:

    【Java游戏项目】1小时教你用Java语言做经典扫雷游戏_手把手教你开发游戏

    【Java毕业设计】OA办公系统项目实战_OA员工管理系统项目_java开发

     

    展开全文
  • 本文是服务器开发系列文章的第一篇,主要讲述计算机硬件的相关知识

    系列文章目录


    前言

    这是服务器开发系列文章的开始,其整体最终目标是按照MLOps的规范,开发在服务器端运行的机器视觉软件系统。这里先介绍最基础的计算机硬件部分。

    一、概念

    计算机就是一种计算器,而计算器其实是接受用户输入指令与数据,经由中央处理器的数学与逻辑单元运算处理后,以产生或储存成有用的信息。

    二、组成

    计算机的硬件组成部分主要可分为三类:
    ①输入单元:包括键盘、鼠标、扫描仪、手写板、触摸屏等;
    ②主机部分:就是系统单元,被机箱或机壳保护住的,里面含有一堆板子、CPU与存储器等;
    ③输出单元:例如屏幕、打印机等。
    主机的重点在于中央处理器CPU,CPU是一个具有特定功能的芯片,里面含有微指令集。如果想要让主机进行什么功能,就得要参考这颗CPU是否有相关内建的微指令集才行。由于CPU的工作主要在于管理与运算,因此在CPU内又可分为两个主要的单元,分别是算数逻辑单元与控制单元,其中算数逻辑单元主要负责程序运算与逻辑判断,控制单元则主要在协调各周边组件与各单元间的工作。所有的单元都是由CPU内部的控制单元来负责协调的,因此CPU是整个计算机系统最重要的部分。
    存储器可分为内存和外存,内存也称为主存储器,主要有RAM和ROM,都基于电存取数据,RAM断电数据全部丢失,用于临时保存数据,存取数据快,ROM断电数据不丢失,但只能读取,主要用于BIOS;外存用于永久保存数据,断电数据仍然存在,主要有机械硬盘和固态硬盘SSD、U盘等。
    CPU读取的数据都是从内存来的,内存内的数据则是从输入单元所传输进来,而CPU处理完毕的数据也必须要先写回内存中,最后数据才从主内存传输到输出单元。安装软件都是装到硬盘中,软件的运行都是把数据加载到内存中,所以说计算机的硬盘大小决定了能够安装的软件数目,而计算机内存的大小决定了计算机能够同时运行的软件数目,这也就是当你内存不足时,系统的能效很差的原因。

    在主机机壳内的设备大多是通过主板连接在一起,主板上面有连接沟通所有设备的芯片组,这个芯片组可以将所有单元的设备连接起来,好让CPU可以对这些设备下达命令。其运作流程可以参照人体进行理解:
    ①CPU=脑袋:每个人会做的事情都不一样(微指令集的差异),但主要都是通过脑袋来进行判断与控制身体各部分的活动;
    ②内存=脑袋中放置正在被思考的数据区块:在实际活动过程中,我们的脑袋需要有外界刺激的数据(例如光线、环境、语言等)来分析,这些互动数据暂时存放的地方就是内存,主要是用来提供信息给脑袋判断;
    ③硬盘=脑袋中放置回忆的记忆区块:跟内存不同,内存是提供脑袋目前要思考与处理的信息,但有些生活琐事或其他没有要立刻处理的事情,就得当成回忆先放置到脑袋的记忆深处,那就是硬盘,主要目的是将重要的数据记录起来,以便未来将这些重要的经验再次使用;
    ④主板=神经系统:就像人类的神经将所有重要的组件连接起来一样,包括手脚的活动都是脑袋发布命令后,透过神经(主板)传导给手脚来进行活动;
    ⑤各项接口设备=人体与外界沟通的手、脚、皮肤、眼睛等:就好像手脚一般,是人体与外界互动的重要关键;
    ⑥显示适配器=脑袋中的影像:将来自眼睛的刺激转成影像后在脑袋中呈现,所以显示适配器所产生的数据源也是CPU控制的;
    ⑦电源=心脏:所有的组件要能运作得要有足够的电力供给才行。电力供给就好像心脏一样,如果心脏不够力,那么全身也就无法动弹,心脏不稳定,那你的身体当然可能断断续续。

    1. CPU

    我们使用的软件都要经过CPU内部的微指令集来达成才行,这些指令集的设计主要又被分为两种CPU设计架构,分别是:精简指令集RISC与复杂指令集CISC系统
    ①精简指令集:其中的微指令集较为精简,每个指令的运行时间都很短,完成的动作也很单纯,指令的执行效能较佳,但若要做复杂的事情,就要由多个指令来完成。这种架构的CPU主要有ARM(代表应用手机和网络设备)和IBM公司的PowerPC(代表应用PS3游戏机),目前世界上使用范围最广的CPU就是ARM。
    ②复杂指令集:其微指令集的每个小指令可以执行一些较低阶的硬件操作,指令数目多而且复杂,每条指令的长度并不相同。由于指令执行较为复杂所以每条指令花费的时间较长,但每条个别指令可以处理的工作较为丰富。主要的复杂指令集CPU有AMD、Intel等x86架构的CPU,x86架构的CPU被大量使用于个人计算机。

    CPU架构中的位指的是CPU一次数据读取的最大量,64位CPU代表CPU一次可以读写64bits这么多的数据,32位CPU则是一次读写32bits数据。由于CPU读取数据量有限制,因此能够从内存中读写的数据也有所限制,一般32位的CPU所能读写的最大数据量大概为4GB。
    不同的x86架构的CPU有什么区别?除了CPU的整体结构(如二级缓存、每次运作可执行的指令数等)之外,主要是微指令集的不同。新的x86的CPU大多含有很先进的微指令集,这些微指令集可以加速多媒体程序的运作,也能够加强虚拟化的效能,而且某些微指令集更能够增加能源效率,让CPU的电耗更低。
    Intel和AMD的x86架构中,主要微指令集有
    多媒体微指令集:MMX、SSE、SSE2、SSE3、SSE4、AMD-3DNow;
    虚拟化微指令集:Intel-VT、AMD-SVM;
    ③省电功能:Intel-SpeedStep、AMD-PowerNow;
    ④64/32位兼容技术:AMD-AMD64、Intel-EM64T。

    目前主流的CPU都是双核以上的架构了,原本的单核CPU仅有一个运算单元,所谓的多核心则是在一颗CPU封装当中嵌入了两个以上的运算核心,简单的说,就是一个实体CPU外壳中含有两个以上的CPU单元就是了。
    Intel还有个很怪的东西叫CPU的超线程Hyper-Threading功能。由于现在CPU指令周期都太快乐,因此运算核心经常处于闲置状态下,而我们现在的系统大多都是多任务系统,即同时间有很多的程序会让CPU来执行。因此若CPU可以假象的同时执行两个程序,不就可以让系统效能增加了么,反正CPU的运算能力还没有用完!其实现原理为:在每个CPU内部将重要的寄存器register分成两群,让程序分别使用这两群寄存器。也就是可以有两个程序同时竞争CPU的运算单元,而非透过操作系统的多任务切换!这会让CPU好像同时有两个核心一样。因此虽然大部分Intel i7等级的CPU只有四个实体核心,但通过超线程机制,操作系统可以抓到八个核心,并且让每个核心逻辑上分离,就可以同时运作八个程序了!在大多数情况下,超线程确实可以提高相当多的效能,节约30-50%的等待时间,但有些情况下是可能导致效能降低的。

    2. 主板

    由于主板是连接各组件的一个重要项目,因此在主板上面沟通各部分组件的芯片组设计的优劣就会影响效能不少!早期的芯片组通常分为两个网桥来控制各组件的沟通,分别是:
    ①北桥:负责连接速度较快的CPU、内存与显示适配器等组件;
    ②南桥:负责连接速度较慢的装置接口,包括硬盘、USB、网卡等。
    由于北桥最重要的就是CPU与主存储器之间的桥接,因此目前的主流架构中,大多将北桥内存控制器整合到CPU封装当中了

    在早期的CPU设计中,外频指的是CPU与外部组件进行数据传输时的速度,倍频则是CPU内部用来加速工作效能的一个倍数,两者相乘才是CPU的频率速度。例如Intel Core2 E8400的内频为3.0GHz,外频是333MHz,于是倍频就是9倍(3.0G = 333M9)。
    很多计算机玩家喜欢玩超频,所谓超频指的是:将CPU的倍频或者是外频通过主板的设定功能更改成较高频率的一种方式。但由于CPU的倍频通常在出厂时已经被锁死无法修改,因此较常被超频的是外频。例如像上述3.0GHz的CPU如果想超频,可以将它的外频333MHz调整成400MHz,如此一来整个主板的各个组件的运作频率可能都被增加为原来的4/3=1.33倍,于是CPU就可能达到3.0
    1.33≈3.6GHz。但因为频率并非正常速度,有可能会造成宕机
    由于现在已经没有所谓的北桥了(整合到CPU内),因此CPU的频率设计就无须考虑要同步的外频,而只考虑整体的频率即可。所以如果使用cpu-z查看计算机性能时,会发现外频变成100MHz,倍频达到30以上。
    现在Intel的CPU会通过turbo技术主动帮你超频!例如i7-4790的基本频率为3.6GHz,最高可自动超频到4GHz,而如果没有大量的运算需求,该CPU频率则会降到1.xGHz,来达到节能省电的目的。如果使用cpu-z观察Intel的CPU频率,会发现该频率会一直自动变动

    由于各组件的价格不断下降,现在主板上通常已经整合了相当多的设备组件,常见整合到主板的组件包括声卡、网卡、USB控制卡、显卡、磁盘阵列等。你会在主板上面发现很多方形的芯片,它们通常是一些个别设备的芯片。

    主板是负责各个计算机组件之间沟通的,但计算机组件实在太多,有输出/输入/不同的存储装置等,主板芯片组需要沟通时就需要用到I/O地址与IRQ。I/O地址优点类似每个装置的门牌号码,每个装置都有它自己的地址,不能有两个装置使用同一个I/O地址,否则系统就会不晓得该如何运作这两个装置了。而IRQ可以想象成是各个门牌连接到邮件中心(CPU)的专门路径,各装置可以透过IRQ中断通道来告知CPU该装置的工作情况,以方便CPU进行工作分配的任务。老式的主板芯片组IRQ只有15个,如果你的周边接口太多时可能就会不够用,这个时候你可以选择将一些没有用到的周边接口关掉,以空出一些IRQ来给真正需要使用的接口。此外还有所谓的sharing IRQ技术。

    主板与各项输入/输出设备的链接主要都是在主机机壳后方,主要类型有:
    ①PS/2接口:这原本是常见的键盘和鼠标接口,不过目前渐渐被USB接口取代,甚至较新的主板可能就不再提供PS/2接口了;
    ②USB接口:可进一步分为USB 2.0与USB 3.0接口,为了便于区分,USB 3.0插槽为蓝色;
    ③声音输入输出与麦克风:都是些圆形插孔,必须你的主板上面有内建音效芯片时,才会有这三个接口;
    ④RJ-45网口:只有内建网络芯片时才会有这种接口。其接头有点类似电话接头,不过内部有八蕊线芯,接上网线后在这个接头上会有灯亮起才对;
    ⑤HDMI:如果有内建显示芯片的话,可能就会提供这个与屏幕连接的界面了。这种接口可以同时传输声音与影像,目前也是电视屏幕的主流接口。

    3. 内存

    与CPU的频率类似,内存也有其工作频率,这个频率限制是由CPU内的内存控制器所决定的。例如CPU内建的内存控制芯片对内存的工作频率最高可达1600MHz,这只是工作频率,每次频率能够传输的数据量大多为64位,这个64位就是所谓的总线宽度或字组大小word size,于是CPU可以从内存中取得的最快带宽就是1600MHz*64bit=12.8GB/s。
    个人计算机的主存储器主要组件为动态随机存取内存DRAM,随机存取内存只有在通电时才能记录与使用,断电后数据就消失了,因此这种RAM称为挥发性内存。使用较广的DRAM有所谓的SDRAM与DDR SDRAM两种,这两种内存的差别除了在于脚位与工作电压上的不同之外,DDR即所谓的双倍数据传输速度,它可以在一次工作周期中进行两次数据的传送,感觉上就像是CPU倍频了,所以传输频率方面比SDRAM要好。新一代的PC大多使用DDR内存!DDR内存又依据技术发展,有DDR、DDR2、DDR3、DDR4等,其中DDR2的频率倍数是4倍,而DDR3则是8倍,DDR4就是16倍
    在这里插入图片描述
    DDR3L是专门为省电设计的内存,其制程中降低了主存储器的操作电压,DDR3标准电压为1.5V,DDR3L则为1.35V,其通常用在耗电量需求更低的笔记本电脑中!但需要看主板的规格是否支持。
    内存除了频率/带宽与型号需要考虑外,内存的容量也是很重要的,因为所有的数据都得要加载到内存当中才能被CPU判读,如果内存容量不够大的话将会导致某些大容量数据无法被完整的加载,此时已存在于内存当中但暂时没有被用到的数据必须先被释放,使得可用内存容量大于该数据,新数据才能被加载!所以通常越大的内存代表越快速的系统,这是因为系统不用常常释放一些内存内部的数据。对于服务器来说,主存储器的容量有时比CPU的速度还要重要
    由于所有的数据都必须要存放在内存中,所以内存的数据宽度当然是越大越好。但传统的总线宽度一般仅为64位,为了加大这个宽度,芯片组厂商将两个内存汇整在一起,如果一支内存可达64位,两支内存就可达128位了,这就是双通道!如果要启用双通道功能,你必须要安插两支或四支内存,将这些内存插入到主板上颜色相同的插槽中。这几支内存最好所有参数、包括型号都一模一样,这是因为启动双通道内存功能时,数据是同步写入/读出这一对内存的,如此才能够提升整体的总线宽度!服务器需要的速度更快,因此除了有双通道设计外,中阶的服务器还有三通道、四通道的内存环境!例如服务器E5-2650 v3可以最大采用四通道,且都为DDR4。

    除了内存外,整部个人计算机当中还有许多的内存,最有名的就是CPU内的二级缓存L2 cache。我们知道CPU的数据都是由内存提供的,但CPU到内存之间还得通过内存控制器。如果某些很常用的程序或数据可以放置到CPU内部的话,CPU数据的读取就不需要到内存重新读取了,这样可以大大提升计算机的效能!这就是二级缓存的设计理念。由于二级缓存被整合到CPU内部,因此这个二级缓存的速度必须要与CPU的频率相同,而使用DRAM是无法达到这个速度的,此时就需要静态随机存取内存SRAM了。SRAM在设计上使用的晶体管数据较多,价格较高,且不易做成大容量,但由于其速度快,因此被用作二级缓存。
    在这里插入图片描述
    固件firmware是写入只读存储器ROM的程序,固件是指设备内部保存的设备驱动程序,通过固件操作系统才能按照标准的设备驱动实现特定机器的运行动作。固件是担任一个系统最基础最底层工作的软件,而在硬件设备中,固件就是硬件设备的灵魂,因为一些硬件设备除了固件以外没有其它软件组成,因此固件也就决定着硬件设备的功能及性能。很多硬件上面都有固件,例如磁盘阵列、网卡、交换器等。固件是为控制硬件设备而设计的,在计算机中称之为BIOS(基本输入/输出系统)或UEFI(统一可扩展固件接口)。BIOS是计算机上电后第一个启动的,它可以与硬件交互并检查它是否有任何错误。
    不同的操作系统操作硬件的方式是完全不同的,在Windows里应用态是无法直接写IO端口的,而在嵌入式系统中,一般都不限制直接操作IO端口。所以硬件厂商一方面为了自己的硬件能被软件更简单的使用,需要写firmware;另一方面为了兼容不同的操作系统,又不能把firmware写的太死,必须预留足够的余地让软件自由发挥(软件的自由发挥靠的是驱动程序)。
    BIOS(Basic Input Output System)是一套程序,这套程序是写死在主板上面的一个内存芯片中,这个内存芯片在没有通电时也能够将数据记录下来,是由只读存储器ROM(非挥发性内存)实现的。BIOS对于计算机系统非常重要,因为它掌握了系统硬件的详细信息与开机设备的选择等。但计算机发展的速度太快,因此BIOS程序代码需要做适度的修改才行。但BIOS最初使用的是无法改写的ROM,所以根本无法修正BIOS程序;而现在BIOS通常是写入类似Flash或EEPROM中

    4. 显卡

    显卡也叫显示适配器Video Graphics Array,也就是GPU,对于图形影像的显示扮演重要角色。一般对于图形影像的显示重点在于分辨率与颜色深度,因为每个图像显示的颜色会占用内存,因此显卡上面会有一个内存的容量,这个显卡显存容量将会影响到你屏幕分辨率与颜色深度。除了显卡显存之外,现在由于三维游戏与动画的流行,对显卡的运算能力要求也越来越高。一些3D运算早期是交给CPU去运算的,但CPU并非完全针对这些3D进行设计的,而且CPU平时已经非常忙碌了,所以后来显卡厂商直接在显卡上面嵌入一个3D加速芯片,这就是GPU称谓的由来、显卡主要也是通过CPU的控制芯片来与CPU、内存等沟通。对于3D游戏等应用来说,显卡需要高速运算,所以数据的传输是越快越好,因此目前都使用数据传输带宽最高的PCI-Express插槽
    在这里插入图片描述
    PCIe使用的是类似管线的概念来处理,管线越多(通常设计到x16的管线)则总带宽越高
    在这里插入图片描述
    如果你的主机是用来打3D游戏的,那么显卡的性能就至关重要;如果你的主机是用来做网络服务器的,那么简单的入门级显卡就够用了。

    5. 硬盘

    传统硬盘有个很致命的问题,就是需要驱动马达去转动磁盘盘,这会造成很严重的磁盘读取延迟!想象一下,你得要知道数据在哪个扇区上面,然后再命令马达开始转,之后再让读取头去读取正确的数据。另外如果数据放置的比较离散(扇区分布比较广又不连续),那么读写速度就会延迟更明显,速度快不起来。于是后来就有厂商拿闪存去制作高容量的设备,这些设备的连接界面也是透过SATA或SAS,外型也跟传统硬盘一样。虽然这类设备已经不能称为是硬盘,但为了方便称呼,称为固态硬盘SSD。固态硬盘最大的好处是它没有马达不需要转动,而是透过内存直接读写的特性,因此除了没数据延迟且快速之外还很省电!不过SSD有个重要的致命伤,就是这些闪存有写入次数的限制,因此通常SSD的寿命大概两年就顶天了。所以数据存放时,需要考虑到备份或者是可能要使用磁盘阵列RAID的机制来防止SSD损毁
    为了提升硬盘的传输速度,目前硬盘与主板的连接接口主要为SATA和SAS。SATA取代了以前的IDE,SAS取代了SCSI。目前SATA版本已经出到第三代,主要差别就是传输速度,主流硬盘都使用SATA3接口,传输速度可达600MB/s。但要真正达到或接近理论传输速度,必须使用固态硬盘而不能使用传统硬盘,实测SSD极速可达500MB/s。
    在这里插入图片描述
    在工作站或大型电脑上面,为了读写速度与稳定度,大多使用的是SAS而不是SATA,但是SAS相比SATA会贵很多!SAS接口支持热插拔,磁盘阵列使用的就是SAS接口
    在这里插入图片描述
    在测试磁盘效能时有个很特殊的单位,称为每秒读写操作此时IOPS,这个数值越大,代表可操作次数较高,效能也就更好。

    6. 适配卡

    计算机可能因为某些特殊的需求,需要使用主板之外的其他适配卡,所以主板上面通常会预留多个扩充插槽。由于PCIe的传输速度太快太好用了,因此几乎所有的卡都以PCIe来设计。PCIe有不同的通道数,基本上常见的有x1,x4,x8,x16等,个人计算机主板常见的是x16,但中阶服务器大多有多个x8的接口,x16的接口反而少见。目前PCIe 2.0 x1最高可达500MB/s的传输速度。CPU最多仅能支持16个PCIe 3.0的通道,你可以设计的扩充方式有:
    ①一个x16;
    ②两个x8;
    ③两个x4加一个x8。
    使用PCIe 3.0 x8的接口时,其传输速度基本就已经不会完全用光了。主板上面可能有多个扩展插槽,将扩展卡安插在跟CPU直联的那几个插槽时效能最佳。如果是安插在其他插槽时,扩展卡的数据需要先进入南桥跟大家抢带宽,之后还要通过CPU与南桥沟通的管道传向CPU,速度自然要差很多。

    7. 电源

    电源适配器简称电源,其价差非常大,这是因为Power的用料不同,电源供应的稳定度也会差很多。电源相当于心脏,心脏差的话活力就会不足。所以稳定度差的电源甚至是造成计算机不稳定的元凶,所以尽量不要使用太差的电源
    电源本身会吃掉一部分的电力,如果你的主机系统需要300W的电力时,因为电源本身也会消耗掉一部分电力,因此你最好挑选400W以上的电源。电源出厂前会有一些测试数据,最好挑选高转换率的电源。所谓的高转换率指的是输出功率/输入功率,假设你的主板用电量为250W,但电源已经用掉320W的电力,则转换率为250/320=0.78。这个数值越高表示被电源浪费的电力越少,更符合能源效益

    三、分类

    如果以计算机的复杂度与运算能力进行分类的话,主要可以分为以下几类:
    ①超级计算机Super Computer:其是运作速度最快的计算机,但它的维护、操作费用也最高。主要用用于需要有高速计算的计划中。例如国防军事、气象预测、太空科技,用在模拟的领域较多。如国家的各超算;
    ②大型计算机Mainframe Computer:其通常也具有数个高速的CPU,功能上虽不及超级计算机,但也可用来处理大量资料与复杂的运算。例如大型企业的主机、全国性的证券交易所等,其每天需要处理数百万笔的数据,或者是大型企业的数据库服务器等;
    ③迷你计算机Mini Computer:其仍保有大型计算机同时支持多用户的特性,但是主机可以放在一般作业场所,不必像前两类大型计算机一样需要特殊的空调场所。通常用来作为科学研究、工程分析与工厂的流程管理等;
    工作站WorkStation:其价格比迷你计算机便宜许多,是针对特殊用途而设计的计算机。在个人计算机的效能还没有提升到目前的状况之前,工作站的性价比是所有计算机当中较佳的,因此在学术研究与工程分析方面相当常见
    ⑤微电脑Micro Computer:个人计算机就属于这个类别,其体积最小、价格最低,但功能还是五脏俱全的,大致可分为桌面型、笔记本型。
    如果光以效能来说,目前的个人计算机(也就是微电脑)效能已经够快了,甚至已经比工作站等级以上的计算机指令周期还要快,但工作站强调的是稳定不宕机,并且运算过程要完全正确,因此工作站及其以上等级的计算机在设计时的考虑是与个人计算机不同的,这也是为什么工作站等级以上的计算机售价较贵的原因!

    四、性能

    计算机对于数据是以文件形式存储的,文件容量使用的是二进制的方式,每个记录单位只认识0与1而已,0/1这个二进制的单位我们称为位bit。但bit实在太小了,所以存储数据时每份简单的数据都会使用到8个bits的大小来记录,于是定义了字节byte这个单位,1 byte = 8 bits。例如你购买了500GB的硬盘,但格式化后只剩下460GB左右的容量。这是因为硬盘制造商会使用十进制的单位,500GB=500100010001000Bytes,转换文件的容量单位时使用二进制(1024为底),所以就成为466GB的容量了。硬盘厂商并非要骗人,只是因为硬盘的最小物理量为512Bytes,最小的组成单位为扇区sector,通常硬盘容量的计算采用多少个sector来表示,所以才会使用十进制来统计。
    计算机速度的单位采用十进制,CPU的指令周期通常使用MHz或者GHz之类的单位,Hz就是秒分之一。频率是CPU每秒可以进行的工作次数,频率越高表示这颗CPU单位时间内可以做更多的事情。例如**Intel的i7-4790 CPU频率为3.6GHz,表示这颗CPU在一秒内可以进行3.6
    10^9次工作,每次工作都可以进行少数指令运作**。频率也是CPU效能的重要体现。
    注意:不同的CPU之间不能单纯的以频率来判断运算效能!这是因为每颗CPU的微指令集不相同,架构也不一定一样,可使用的二级缓存及其计算机制可能也不同,加上每次频率能够进行的工作指令数也不同,所以频率目前仅能用来比较同系列CPU的速度!
    在网络传输方面,由于网络使用bit为单位,因此网络常使用的单位是Mbps,即Mbits per second。
    在选购计算机主机时应进行整体考虑,很难依照某一项标准来选购。如果你的公司需要一部服务器的话,建议不要自行组装,买品牌计算机的服务器会更好。这是因为自行组装的计算机虽然比较便宜,但每项设备之间的适应性是否完美则有待自行检测。另外在效能方面并非仅考虑CPU的能力而已,速度的快慢与整体系统最慢的那个设备有关。例如你使用Intel i7系列产品,DDR3-1600内存,但配上一个较慢的显卡,则整体的三维速度会卡在显卡上面。

    五、稳定性

    系统不稳定的可能原因有
    系统超频:这个行为很不好,不要主动尝试;
    电源不稳:如有需要可以测试一下电源的稳定度;
    内存无法负荷:现在生产的内存质量差很多,差一些的内存可能会造成主机在忙碌工作时,产生不稳定或宕机;
    系统过热:热是造成电子元件运作不良的主要因素之一,如果主机在夏天容易宕机、冬天却还好时,可以考虑加几个风扇,其有助于机壳内的散热,系统会比较稳定。

    基本上说,计算机是一种相当不可靠的机器,常常会听到说要计算机正常工作,最重要的是要去拜拜!这还是真的,尤其是在日前一些计算机周边硬件的生产良率 (就是将硬件产生出来后,经过测试发现可正常工作的与不能正常工作的硬件总数的比值) 越来越差的情况下,计算机的不稳定状态实在是越来越严重了!一般会造成系统损毁的硬件组件应该就是硬盘,因为其他组件坏掉时,虽然会影响到系统的运作,不过至少我们的数据还是存在硬盘当中的!为了避免这个困扰,推荐使用可备份用的RAID1, RAID5, RAID6等磁盘阵列

    计算机硬件只是基础,其重点在于软件,相当于是计算机的灵魂,如果没有软件运作,计算机的功能就无从发挥!

    六、CPU与其他类似产品的区别

    1. CPU和GPU的区别

    二者主要有以下5个方面的区别:
    1.概念
    CPU是一块超大规模的集成电路,是一台计算机的运算核心Core和控制核心Control Unit。它的功能主要是解释计算机指令以及处理计算机软件中的数据。
    GPU是一种专门在个人电脑、工作站、游戏机和一些移动设备(如平板电脑、智能手机等)上图像运算工作的微处理器。
    2. 缓存
    CPU有大量的缓存结构,目前主流的CPU芯片上都有四级缓存,这些缓存结构消耗了大量的晶体管,在运行的时候需要大量的电力。
    GPU的缓存就很简单,目前主流的GPU芯片最多有两层缓存,而且GPU可以利用晶体管上的空间和能耗做成ALU单元,因此GPU比CPU的效率要高一些。
    3. 响应方式
    CPU要求的是实时响应,对单任务的速度要求很高,所以就要用很多层缓存的办法来保证单任务的速度。
    GPU是把所有的任务都排好,然后再批处理,对缓存的要求相对很低。
    4. 浮点运算方式
    CPU除了负责浮点整形运算外,还有很多其他指令集的负载,比如像多媒体解码,硬件解码等,因此CPU是多才多艺的。CPU注重的是单线程的性能,要保证指令流不中断,需要消耗更多的晶体管和能耗用在控制部分,于是CPU分配在浮点计算的功耗就会变少。
    GPU基本上只做浮点运算,设计结构简单,也就可以做的更快。GPU注重的是吞吐量,单指令能驱动更多的计算,相比较GPU消耗在控制部分的能耗就比较少,因此可以把电省下来给浮点计算使用。
    5. 应用方向
    CPU所擅长的像操作系统这一类应用,需要快速响应实时信息,需要针对延迟优化,所以晶体管数量和能耗都需要用在分支预测、乱序执行、低延迟缓存等控制部分。CPU主要用于通用计算领域,就什么领域都可以用。
    GPU适合对于具有极高的可预测性和大量相似的运算以及高延迟、高吞吐的架构运算。GPU主要应用于游戏、挖矿、AI这三个计算量特别大的领域,属于辅助或专用型部件
    现在还推出了GPGPU(通用GPU),可以将其理解为一个辅助CPU的工具,它能够帮助CPU进行非图形相关程序的运算。通常电脑端的GPU负责电脑的图形渲染,这是一个负荷较大的工作,为了给GPU分担一部分压力,一些非图形相关程序的运算就会交给电脑的CPU来完成,而GPGPU则是主要负责非图形相关程序的运算。GPGPU主要用于物理计算、加密解密、科学计算以及比特币等加密货币的生成

    2. CPU和MCU的区别

    CPU是计算机系统的运算和控制核心。而MCU(微控制器单元)也称微型计算机或单片机,是指将计算机的CPU、RAM、ROM、定时计数器和多种I/O接口集成在一个芯片上,形成芯片级的计算机
    MCU的特性主要有:
    ①可编程:可以通过编写C语言或者汇编程序,下载到MCU里面,让它按照我们的程序逻辑去控制电路,灵活性很高;
    ②结构简单、体积小:内部芯片作为计算机系统,其结构简单,但是功能完善,使用起来十分方便,可以模块化应用;
    ③控制功能强:MCU对数据的处理能力和运算能力较强,MCU的指令系统均有极丰富的条件分支转移能力,I/O接口的逻辑操作及位处理能力,非常适用于专门的控制功能;
    ④低功耗、低电压:许多单片机的工作电压仅为1.8-3.6V,工作电流仅为数百μA。
    MCU的应用场景多种多样,例如电饭煲、微波炉、空调和洗衣机等;除此以外,在物联网的智能家居、智慧停车场、智慧农业等领域也有应用;现在医疗设备领域也开始广泛采用MCU,常见的有血压计、血氧计、血糖仪、体温计和额温枪以及生化采集系统设备。

    3. MCU和PLC的区别

    PLC是基于MCU的产品,在MCU的基础上增加了模块化的开发,不用编写底层的代码,无须了解单片机的底层资源,可以使用厂家提供的一个二次开发的、界面友好的编写软件来构成系统应用。PLC是CPU的特例,是针对某个行业的具体应用,开发使用起来比较方便快捷
    ①可靠性方面:在工业方面的设备,平时购买的单片机和一些元器件仅仅能达到商业级,再加上开发后测试水平达不到,在可靠性方面很难保证。而工业环境中电磁干扰是非常多的,如继电器的通断、电机的起停都能够导致单片机的重启或者通讯的失误。相对而言PLC就能够满足设备工业级要求,在抗干扰方面、输入和输出点可靠性方面更为优越,并采用可靠的组态方式,因此可靠性更高,而且通信方面有很多工业控制设备采用光纤以抗干扰。
    ②易用性方面:采用单片机实现通信等系统架构太过麻烦,在简单并且不关键的部位可采用单片机实现部分功能。而PLC等设备可采用整体式或者积木式,各个组件可以按需选用,并便于组态实现。各个工作站之间采用规范的总线通讯,这都是模块内置的,只需配置无须编写代码,简单可靠。
    ③其他方面:
    <1>工业环境下受周围交流电机启停等影响,电压可能会有较大的波动。为了应对这种恶劣的环境,必须为MCU设计相应的电源模块,使电压剧烈变动时不会引发MCU的工作异常;
    <2>在工业环境下,传感器的输出多采用4-20mA、0-10V的形式,这与MCU常用的0-3.3V或者0-5V的AD模块不相符合,因此需要针对工业环境设计传感信号接收模块;
    <3>工业环境的输出很多是用来控制继电器(经过继电器隔离后,再去控制电机等的启停),而MCU的输出只能控制微型继电器,无法驱动常用的工业继电器,因此要在MCU外围设计具有大驱动能力的IO接口。有很多工业数据总线协议,为了能保证MCU与外界正常通讯,需要封装模块来支持这些协议。

    总结

    以上就是关于计算机硬件要讲的内容,欢迎大家对本文章进行补充和指正。

    参考资料

    《鸟哥的Linux私房菜 基础学习篇》,人民邮电出版社出版
    https://www.zhihu.com/question/19903344/answer/714024535,CPU 和 GPU 的区别是什么?
    https://zhuanlan.zhihu.com/p/531078143,cpu和mcu的区别是什么
    https://zhuanlan.zhihu.com/p/544521249,plc与mcu的区别是什么?

    展开全文
  • 游戏服务器开发都要学什么

    万次阅读 多人点赞 2019-08-22 17:26:27
    一,游戏服务器开发工作介绍 近来遇到有很多人想从其它开发领域转到游戏服务器开发行业上来,他们或许觉得游戏服务器开发工资高,或许觉得做游戏服务器需要掌握的技术更高级,可以锻炼自己,或许觉得想换个环境等等...

    一,游戏服务器开发工作介绍

    近来遇到有很多人想从其它开发领域转到游戏服务器开发行业上来,他们或许觉得游戏服务器开发工资高,或许觉得做游戏服务器需要掌握的技术更高级,可以锻炼自己,或许觉得想换个环境等等。不管出于什么原因吧,做为一名几年的游戏服务器开发者,当然是持欢迎态度的,那么我就先介绍一下游戏服务器开发的工作吧,游戏服务器开发具体要做哪些工作呢?

    1,团队沟通

    基本上不管做什么开发,都是一个团队来完成的,游戏也是如此,游戏团队一般由老板,总经理,CTO(技术主管),主策划(领导一些人,包括数值策划,系统策划,特效策划),主美(领导一些人,包括原画,UI设计,特效动作设计),客户端主程(领导一些人,客户端程序员,客户端程序员...),服务器主程(领导一些人,包括服务器程序员,服务器程序员),外加运维。而游戏的大部分逻辑实现与逻辑数据验证都会放在服务器端,所以服务端程序需要明确了解策划的需求,要了解就需要沟通,沟通方式的正确与否,直接关系到功能的实现是否正确,由于游戏逻辑的复杂性,单纯的文档描述可能不会非常完整,不像其它行业需求文档就几百页,详细的图文并茂,制定好之后也很少变化。所以做为一名游戏程序员,一定要有良好的沟通方式和技巧。

    2,架构设计

    这个架构设计就像盖房子打基础,基础好,房子就稳固,基础不好,房子高了就容易倒。架构设计需要结合软件工程学来搞,它需要对服务器的整个流程有足够的了解,对需求的变化有足够的认识。架构的设计一般有几个特性。

    首先是易用性,架构一旦完成,在开发的时候就要方便使用,比如网络通信架构,设计好之后,其他开发者就不需要关心客户端的数据是怎么被传输到服务器端的,这个时候对于服务器开发者来说,只需要实现一些简单的接口,就可以直接对客户端发送来的请求进行处理操作。再比如说服务器端数据的存储与更新,开发者只需要写少量SQL语句或基本不用写,都由架构的底层代码完成,开发者只需要调用封装好的API,就可以把数据存入数据库而不用关心数据的最终流向,只需要关心实现逻辑就可以了。

    第二,可扩展性,可扩展性包括两个方面,一是代码的可扩展性,比如说游戏中的任务处理吧,一个游戏中任务可能有几十种,而且还可能不定时的增加,为了判断不同的任务类型该执行什么操作,最简单也是最差的写法是if else,想象一下,一个方法里面,有几十个if else,这简单是bug的理想诞生地呀。一种可行的做法是使用责任链模式(具体的请参考设计模式的实现),这样每种任务都有一个单独的类去处理它,而不会影响其它的类,符合开闭原则,相互关联少,越少越不容易出bug。二是部署的可扩展性,比如,如果在线人数突然增加或预期可能要增加,一台物理机器可能处理不过来这么多的请求,那怎么办?那就需要支持在不影响其它服务器运行的情况下,可以动态的添加机器。而当压力降低之后,又可以移除某些机器,合理利用资源。

    第三,高吞吐量,这个是指能尽量最大化的利用计算机固定的资源,去处理更多的请求,更快速的响应客户端。这就需要在服务器架构设计的时候考虑异步处理,减少IO等待时间(比如请求redis,存储数据库,和其它服务器通信)以及数据缓存。说到异步,一定会涉及到多线程,并发等相关的技术,所以架构设计的时候需要对这部分知识有足够的了解。

    第四,要考虑是否所有的功能模块都放在同一个进程中。也就是需不需要分布式开发,哪些功能需要单独拿出来。对于手机游戏来说,一般要求同时在线量比较小,功能比较单一,所有功能都在一个进程中,人数大量同时在线时,可以多部署几组进程。而对于大型网页游戏或客户端游戏来说,特别是有些大区或不分区的情况,单个功能访问量大,服务器就要考虑分布式部署开发了。

    架构设计一般需要有经验的开发者(项目主程)去搭建,新手可以做为了解,在接触到项目之后,可以按这个思路去理解项目的架构是怎么样构成的,如果让自己来做,能否模仿出来,有时间可以自己尝试去独立设计架构,锻炼自己的能力,为将来自己带项目做主程做好充值准备,机会都是留给有准备之人的。

     

    3,逻辑开发

    架构搭建完成之后,紧接着就是游戏服务器的逻辑开发,这时才开始真正去实现游戏需要的内容,比如注册,登陆,任务,活动,背包,组队战斗等。由于游戏逻辑可能需要的判断条件多,组合变化多,所以在游戏逻辑开发过程中,你会慢慢发现面向对象的重要性。逻辑开发是一个任重而道远的过程,同一个问题,可能有很多种实现方式,不同的实现方式对效率和吞吐量有很大的影响,所以就需要对需求功能的理解要深入,不同功能之间的关联要明确。对常用的设计模式要知道如何使用。比如像上面说的替换数量比较多的if else的方式。逻辑开发需要谨慎细心,而且一定要自己测试才可以,不然bug在不知不觉中就产生了。

    4,系统周边开发

    一个游戏成功的运营,需要很多服务去支持它,比如sdk接入,充值接入,日志统计,游戏运行管理系统(一般叫后台管理系统,是内部人员为了管理游戏的而开发的系统)。比如修改某个用户的等级,封号等。管理系统一般会用web开发,与游戏服务器通信。

     

     

    二,游戏类型与技术选择

    游戏服务器开发使用的技术取决于游戏的类型,不同的游戏类型,需要的游戏环境不一样,所使用的技术也不一样。但是在本质上都是一样的,都是面对数据,处理数据,不同的是面对的数量大小而已。

    1,PC类端游

    这类游戏在线人数庞大,游戏中要处理的数据也非常庞大。所以对服务器性能要求非常高,一般都是采用C++做为开发语言,C++可以直接操作内存数据,与操作系统直接交互,减少数据之间的复制,它运行效率高,处理速度快,是这类游戏开发的首选开发语言。服务器端采用分布式架构,把不同的模块分散在多台物理机上处理。需要学习的大致有C++编程,Linux网络编程、TCP/IP通讯协议、多线程编程再加数据库。它一般开发周期比较长,一个游戏的上线基本上需要三到五年。

    2,网页游戏

    这类游戏相对于端游来说,开发周期短,因为是网页游戏,游戏的界面展示依赖于网络传输,所在在画面和特效上会次于客户端游戏很多。游戏的特点主要集中在游戏的玩法上。但是对于服务器端来说,和端游类是差不多是一样的,有些公司之前是做端游的,他们就直接把端游的服务器架构拿来就可以使用,以完成快速开发。

    3,手机游戏

    手机类游戏目前是最火最热门的游戏,因为他的用户量大,用户占有时间长。但是手机游戏大多数是一般小游戏,功能简单,玩法单一,一般都是休闲娱乐的。现在也有一些稍微大型的MORPG游戏。所以手机游戏开发周期更短,上线更快。

    目前,游戏市场竞争激烈,当前服务器主流的开发语言是C++和Java,但是C++学习难度大,开发速度慢。为了满足游戏服务器快速开发,快速上线,所以一般来说我们都是使用Java语言来开发服务器。近年来,随着游戏市场的发展,游戏服务器开发技术因Java而生成了一套体系。可以供开发者选择。

     

    三,使用Java开发服务器需要学习什么

    Java语言,由于学习成本低,开发速度快,稳定性高,开源框架多,目前已成为网页游戏和手机游戏服务器开发的主要语言。咱们从系统的开发流程简单梳理一下服务器开发需要用到的技术。

    1,网络通信

    这个是首要实现的,如果没有网络通信,就没有服务器存在的必要了。网络通信就需要建立网络连接。目前网络通信有两种方式,一种是短连接,比如http,一种是长连接,比如socket,当然http也是基于socket的,socket是通信的基础。所以要对tcp/ip通信的知识有所了解,明白通信的原理。基于这两种网络通信,游戏服务器也分为两种,弱联网和强联网。弱联网的游戏一般是指一些小型的游戏,比如开心消消乐,连连看,以及一些卡牌养成类游戏,这类游戏一般几秒钟或几分钟再会与服务器同步一次数据,一般会使用短连接。而像一些arpg游戏,实时战斗类游戏,以及带同屏显示玩家的游戏,这类游戏与服务器交互信息频繁,一秒钟可能几十次,会采用长连接,避免每次连接重新建立消耗系统资源,提高通信效率。

    为了网络通信的效率,服务器要使用NIO(非阻塞网络通信)通信。它能支持大并发连接。Java NIO是多路复用IO,在多路复用IO模型中,会有一个线程不断去轮询多个socket的状态,只有当socket真正有读写事件时,才真正调用实际的IO读写操作。因为在多路复用IO模型中,只需要使用一个线程就可以管理多个socket,系统不需要建立新的进程或者线程,也不必维护这些线程和进程,并且只有在真正有socket读写事件进行时,才会使用IO资源,所以它大大减少了资源占用。目前基于此技术有很多开源框架,目前最热门的NIO异步网络通信框架是Netty,它目前已被应用到种大型的开源软件之后,比如RPC调用,阿里云的消 息队列组件RocketMQ,Spring cloud的网关组件也是用Netty实现的。为了便于新手学习,可以参考这个单服游戏服务器框:https://gitee.com/wgslucky/xinyue-alone-game-server  ,此开源框架实现了游戏服务器开发中常见的基本功能,比如网络通信,消息序列化与反序列化,逻辑处理,多线程封装,消息广播,消息加密解密,消息压缩与解压,连接管理,断包与粘包处理等。

    所以在网络通信这一块,如果是弱联网游戏,可以使用web那一套来开发游戏服务器,需要学习的技术一般有http原理,Json格式协议,servlet,Tomcat(也可以是其它web容器),spring等。如果是强联网游戏,要学习的技术有Netty或Mina可以选择一种,多线程以及线程池的应用。这是网络通信所必须掌握的。只要能把客户端发送的信息接收到,并解析成代码使用的明文,就是成功了一半了,剩下的事就是把代码封装好,方便逻辑开发调用!

    通信这块还要考虑消息的并发,长连接情况下,怎么处理断包,粘包问题,每个用户的消息处理的是不是有序的,如果有序会不会阻塞消息,如果无序会不会造成处理混乱,比如后到的消息先处理了,这些问题都要处理好,目前一般是保证同一个用户的消息要有序处理!

    2,数据存储

    网络通信调试好之后,不要急着做逻辑开发,还需要把数据如何存储理清楚!因为服务器端操作的全是数据,如果处理的不好,容易出bug,丢数据,这对游戏玩家来说是致命的,不可接受的!数据存储要考虑,

    一,数据如何存到数据库,是同步存储,还是异步存储!同步存储即将数操作完之后立刻写入数据库,异步操作即数据操作完之后先存储到内存缓存,然后由另外的线程或进程再同步到数据库!游戏中一般都是采用的异步存储方式,因为游戏并发量大,必须低延时,快速响应客户端!如果直接操作数据库太慢,会造成消息阻塞!内存缓存可先择的框架有redis,memcache,具体怎么同步到数据库,需要自己去设计了!

    二,数据接口如何设计,能不能用工作生成这些数据操作的代码,能不能不用写SQL语句,需是封装在底层,或由工具生成。编程是门艺术,在这就体现出来了,当然是仁者见仁,智者见智了!

    三,大并发情况下数据的一致性,像这类可能多线程操作的数据,一般是放在内存中,由锁来控制并发!所以对锁的使用要熟悉,不要出现死锁,或锁粒度过大,造成线程的长时间等待的情况!四,当数据量太大,一个数据库存储不了,数据该怎么分库分表!一种是水平划分,一种是垂直划分!具体的划分方式其它资料已有详细介绍,请自行查找阅读!目前有一个开源的分库框架mycat,是用JAVA写的,大家可以研究一下!

    四,目前常用的数据库有MySQL和MongoDB,MongoDB的优点是在开发过程中添加或删除字段不用操作数据库表,它是文档性数据库。两者各有利弊,可以都熟悉一下。

    3,逻辑开发

    逻辑开发就是实现游戏策划想象的各种游戏功能,比如,登录,物品使用,战斗结算等!逻辑开发代码量巨大,相互之间有很紧密的耦合性,所以每个功能模块一定要划分好!最好是接触下单元测试,写之前考虑一下是否方便单元测试,这样设计的代码会更加清晰,每个方法责任明确,不容易出bug!正是因为逻辑代码复杂,为了更好的管理代码,前辈们给我们总结了一些经验,就是著名的设计模式,所以学习一下设计模式对代码的管理有很大的好处!

    逻辑开发一般遇到的问题有:

    3.1,数据同步

    一说到数据同步或资源共享的时候,一般都会考虑到锁的使用。因为一份资源同时只能被一个线程访问才是安全的。Java的JDK中提供了一些锁,比如:synchronized,以及java.util.concurrent.lock包中的Lock对象,java.util.concurrent包中还提供了其它的一些原子操作的类,我们知道i++操作不是线程安全的,但是可以使用AtomicInteger中的getAndIncrement();方法代替,还有线程安全的ConcurrentHashMap哈稀Map。以及阻塞队列LinkedBlockingQueue等。都是逻辑开发中常用的处理数据同步的类。

    3.2,设计模式的使用

    使用设计模式,可以让代码更加清晰,可扩展性更强,维护性更佳,比如,任务系统,任务会有很多种类型,要获得任务数据时,在一开始写这个系统的时候,我是这样写的if(type == 1)做什么,else if(type == 2)做什么,else if(type == 3)......else if(type == 35) else等。如果需要添加新的类型,又要添加else,这些if else都在同一个方法中。最后都不敢动一块,就怕出bug。其实当一个方法中出现三个以上的if else将来还可能增加时,就应当考虑设计是不是有问题了,后来改成责任链模式或状态模式,就解决了这个问题。还有一个例子是,当一个值变化,要影响多个任务完成状态时,可以使用观察者模式或监听模式或订阅模式去实现,这样功能之间完全解耦,出问题的机率会很小很小。

    3.3,数据缓存框架的API使用

    目前主流使用的数据缓存框架有redis和memcache,虽然在逻辑开发前,主程会对这些进行一些封装,但是作为使用者还是需要对这些框架的客户端的使用要有所了解的。这些可以去阅读相关的文档。不是太难。

    4,程序部署与运行

    目前,大多数Java项目都采用maven管理 ,可以使用maven打包开发好的程序,程序一般运行在远程服务器上,比如云服务器。一般运行Java程序的远程服务器都是Linux系统,需要使用Linux命令操作,或写一些shell脚本去自动化部署管理一些程序。

    5,艰苦奋斗的精神

    首先,一定要让自己对这一行有兴趣,明确自己在这一行的技术选择,人生选择。很多人都知道,程序员加班是常有的事,坚持的住就做,坚持不了就再换一家公司做。

    综上所述,想做Java游戏服务器方面的开发要掌握的技术有以下一些:

    1,网络通信框架,Mina或Netty必须熟悉一种。而且自己必须要亲自搭建过,并明白其它原理。

    2,通信协议制定和处理断包粘包,这一般属于网络通信框架要解决的问题。

    3,数据缓存框架,redis或memcache选择一个,能熟练使用其客户端的命令。

    4,Java基础,Java NIO通信原理,Java集合的使用,Java多线程开发,Java锁的使用,在Java界,以后Spring MVC,Spring Boot,Spring Cloud是必不可少的。

    5,了解一些设计模式。最好能把23种设计模式都看一遍,并结合自己的开发经验,看哪些可以用到设计模式,但也不能死套设计模式,要灵活运用。

    6,熟悉使用Mysql数据库

    7,了解数据库连接池的一些框架,比如Mybatis,hibernate

    8,对Http协议熟悉,熟悉一种web容器,比如tomcat,了解其配置。

    9,对常用的一些Linux命令要熟悉使用。

    10,热爱学习,不断的充实自己,上面所说的只是入门技能而已,真正做起来要复杂的多,一定要让自己喜欢游戏这个行业,这样才能有动力做下去,做自己喜欢的工作还是比为了工作要好的!


     

     

                                                                        

     

    展开全文
  • 基于VC++开发linux服务器程序指南

    千次阅读 2020-07-08 20:45:50
    基于VC开发linux服务器 程序指南(V1.0) 2020-07-08 1 概述.... 3 2 背景.... 3 3 采用本方案目的.... 4 4 适用领域.... 4 5 总体思路.....
  • Linux常用服务器部署命令

    千次阅读 2020-02-12 20:21:11
    在日常开发中我们会做一些服务器部署的工作,对于开发来说,运维部署并不是我们的专项;有些命令不是经常使用,很快就会忘记;在这总结一下日常部署时常用的一些运维命令。 文件操作 tail tail 命令可用于查看文件的...
  • 不管出于什么原因吧,做为一名从事游戏服务器开发和教学很多年的人,我当然是持欢迎态度的,那么我就先介绍一下游戏服务器开发的工作吧,游戏服务器开发具体要做哪些工作呢? 1.团队沟通 基本上不管做什么开发,都...
  • Linux服务器部署常用命令

    千次阅读 2020-02-24 10:22:58
    在日常开发中我们会做一些服务器部署的工作,对于开发来说,运维部署并不是我们的专项;有些命令不是经常使用,很快就会忘记;在这总结一下日常部署时常用的一些运维命令。 文件操作 tail tail 命令可用于查看文件的...
  • Go后端项目服务器部署笔记前言mac远程连接...enabled管理服务器文件Git安装Git拉取你的项目编译你的项目首先开启Go Modules,设置GOPROXY使用go build命令编译你的项目Goland远程开发作用如何配置热更新运行你的项目
  • java游戏服务器必备

    千次阅读 2018-12-28 16:41:44
    对于一个新手,想接触游戏服务器,一定会有个疑问——使用Java开发服务器需要学习什么? &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Java语言,由于学习成本低,开发速度快,稳定
  • 1、单体架构:将所有业务的表现层,业务逻辑层,数据访问层放在一个工程中最终部署在一台服务器 2、垂直架构:按业务场景拆分为互不相干的单体架构项目 3、前后端分离:前端关注页面样式与动态数据的解析及渲染,...
  • 学习JAVA游戏服务器开发需要了解的情况

    万次阅读 多人点赞 2018-06-11 16:09:38
    一,游戏服务器开发的工作介绍近来遇到有很多人想从其它开发领域转到游戏服务器开发行业上来,他们或许觉得游戏服务器开发工资高,或许觉得做游戏服务器需要掌握的技术更高级,可以锻炼自己,或许觉得想换个环境等等...
  • 游戏服务器开发需要学什么

    千次阅读 2017-02-24 09:57:15
    一,游戏服务器开发的工作介绍 近来遇到有很多人想从其它开发领域转到游戏服务器开发行业上来,他们或许觉得游戏服务器开发工资高,或许觉得做游戏服务器需要掌握的技术更高级,可以锻炼自己,或许觉得想换个环境...
  • 部标808和809的出台,统一了产品的标准,统一了平台与终端之间的通讯协议,...但是开发部标GPS服务器是一个繁琐苦逼的活,有各种各样的GPS终端需要兼容和支持,现在交通部颁发了统一的标准协议和数据格式,大部分...
  • 私有服务器搭建全记录(一)

    千次阅读 2020-01-19 23:46:29
    为了给即将过去的高中生活留下一笔小小的财富,我们在暑假里开启了一项庞大的计划:我们四个人一起出资、一起调试、一起搭建一个属于我们四个人的私有服务器。我们高三时的寝室号是221室,所以将这个项目称为:...
  • 2018年3月3日近来遇到有很多人想从其它开发领域转到游戏服务器开发行业上来,他们或许觉得游戏服务器开发工资高,或许觉得做游戏服务器需要掌握的技术更高级,可以锻炼自己,或许觉得想换个环境等等。不管出于什么...
  • 【游戏开发实战】Unity老工程师开始搞Laya了,不想看官方文档,那就看我的教程吧(Laya2.12.0版本 | 案例 | 入门 | 教程)
  • 在上一篇博客,咱们学习的反爬验证信息,是存储在 请求头域 中的信息,签名验证一般在请求体(请求正文)中,服务器接收到对应的字段,并对其来源和合理性进行验证,然后判断是否返回正确数据。 如何判断签名验证 ...
  • 在本文中,我会从Node.js、Apache Server、Nginx、Netty、Redis、Tomcat、MySQL、Zuul等常用服务器程序,给大家逐一分析,分析各种服务器程序的性能,心中有数,才能手中有术,从此性能是熟客。 虽然涉及到很...
  • Namespace 的常用场景之一是不同的环境的配置的区分隔离,例如开发测试环境和生产环境(如配置、服务)隔离等。 利用命名空间做环境隔离。 基于微服务之间互相隔离配置,每一个微服务都创建自己的命名空间,只加载...
  • GET方式:当使用GET方式提交表单内容的时候,浏览器将各个表单自元素及其数据按照URL参数的格式附加在请求行中的资源路径后面。使用GET方式传送的数据量是有限制的,一般限制在1KB一下。表单提交的时候默认是GET...
  • 从事IT行业的很多人都会使用Linux常用命令,但是知道这些常用命令全称的人并不多,让我们来看看这些常用命令对应的全称吧!小编精心整理了一下,毕竟常用命令比较多,如果没有你常用的还望海涵,可以评论区补充~文章...
  • Oracle数据库常用sql语句

    千次阅读 2022-05-13 08:11:34
    ORACLE 常用的SQL语法和数据对象 一.数据控制语句 (DML) 部分 1.INSERT (往数据表里插入记录的语句) INSERT INTO 表名(字段名1, 字段名2, ……) VALUES ( 值1, 值2, ……); INSERT INTO 表名(字段名1, 字段名2, ...
  • Dubbo框架+zookeeper详解

    千次阅读 2022-03-30 14:29:53
    崩溃恢复 1、zookeeper集群中为保证任何所有进程能够有序的顺序执行,只能是leader服务器接受写请求,即使是follower服务器接受到客户端的请求,也会转发到leader服务器进行处理。 2、如果leader服务器发生崩溃,则...
  • 去年刚毕业来公司后,做为新人,发现很多东西都没有文档,各种工具和地址都是口口相传的,而且很多时候都是不知道有哪些工具可以使用,所以...本文介绍的我所在小组的一些开发流程及相关工具。做为新人入门手册,
  • 前沿技术早知道,弯道超车有希望积累超车资本,从关注DD开始图文编辑:xj、来源:网络如何您是一名创业公司的负责人,如何从0搭建公司的后端技术栈。今天要说的后台是大后台的概念,放在服务器上...
  • 阿里巴巴Java开发手册(华山版)

    千次阅读 2020-07-05 13:31:35
    《Java 开发手册》是阿里巴巴集团技术团队的集体智慧结晶和经验总结, 经历了多次大规模一线实战的检验及不断完善, 公开到业界后,众多社区开发者踊跃参与,共同打磨完善, 系统化地整理成册。现代软件行业的高速...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 9,318
精华内容 3,727
热门标签
关键字:

常用服务器端开发语言