搭建Node.js服务器环境

  上一节我们已经知道了服务器要处理游戏逻辑,那么要想实现服务器的功能,首先需要做的就是搭建服务器环境。本书中我们就来讲解如何利用Node.js引擎搭建服务器,Node.js引擎也是当下最流行的服务器技术之一。

  接下来,我们就先来了解一下Node.js。

  Node.js开发

  Node.js是一个Javascript运行时环境(runtime environment),发布于2009年5月,由Ryan Dahl开发,实质是对Chrome浏览器的V8引擎进行了封装。Node.js对一些特殊用例进行优化,提供替代的API,使得V8在非浏览器环境下运行得更好。

  V8引擎执行Javascript的速度非常快,性能非常好。Node.js是一个基于Chrome JavaScript运行时建立的平台,用于方便地搭建响应速度快、易于扩展的网络应用。Node.js 使用事件驱动,非阻塞I/O 模型而得以轻量和高效,非常适合在分布式设备上运行数据密集型的实时应用。

  Node.js优点

  Node.js可以在不新增额外线程的情况下,依然可以对任务进行并发处理,Node.js是单线程的。它通过事件轮询(event loop)来实现并发操作,对此,我们应该要充分利用这一点,尽可能的避免阻塞操作,取而代之,多使用非阻塞操作。

  Node.js模块

  Node.js使用Module模块去划分不同的功能,以简化应用的开发,是模块化编程开发引擎。通过require(模块名)或import{模块名}引入模块。

  模块是可重用的代码库,比如:用来与数据库交互的模块。说到模块必然会提到包的概念。

  包是一个文件夹,他将模块封装起来,用于发布、更新、依赖管理和版本控制。通过package.json来描述包的信息,入口文件,依赖的外部包等等都在这里进行设置。我们可以通过npm install命令来安装包,并通过require语句使用包。

  模块依赖架构

  

  如上图所示:your code 为编辑代码,node.js 为核心,Host environment 为宿主环境(提供各种服务,如文件管理,多线程,多进程,IO等等)

  1.node.js

  这里重点介绍 nodejs 组成部分:v8 engine, libuv, builtin modules, native modules以及其他辅助服务。

  v8 engine:主要有两个作用:1.虚拟机的功能,执行js代码(自己的代码,第三方的代码和native modules的代码);2.提供C++函数接口,为nodejs提供v8初始化,创建context,scope等。

  libuv:它是基于事件驱动的异步IO模型库,我们的js代码发出请求,最终由libuv完成,而我们所设置的回调函数则是在libuv触发。

  builtin modules:它是由C++代码写成各类模块,包含了crypto,zlib, file stream 等基础功能。(v8提供了函数接口,libuv提供异步IO模型库,以及一些nodejs函数,为builtin modules提供服务)。

  native modules:它是由js写成,提供我们应用程序调用的库,同时这些模块又依赖builtin modules来获取相应的服务支持。

  简单总结一下:如果把nodejs看做一个黑匣子,暴露给开发者的接口则是native modules,当我们发起请求时,请求自上而下,穿越native modules,通过builtin modules将请求传送至v8,libuv和其他辅助服务,请求结束,则从下回溯至上,最终调用我们的回调函数。

  2.your code

  当我们执行node.js的时候,node会先做一些v8初试化,libuv启动的工作,然后交由v8来执行native modules以及我们的js代码。

  了解了Node.js的一些相关知识之后,现在开始搭建服务器的环境。

  安装软件

  上面我们提到了用Node.js引擎搭建服务器,那我们就需要先来安装Node.js,除此之外,我们还需要一个开发环境,我们选用轻量级的可跨平台开发的VS.Code开发工具。

  说明:Node.js下载地址(https://nodejs.org/en/)

  VS.Code下载地址(https://code.visualstudio.com/Download)

  环境搭建

  1. 搭建node.js环境

  (1)创建一个工程文件夹

  

  (2)打开Windows命令窗口,指到存放工程文件的盘

  

  (3)通过“cd 工程文件夹目录”命令,进入到工程文件夹中

  

  (4)通过npm init命令创建一个package.json文件

  

  (5)完善package.json文件的相关信息

  

  说明:package name 包名(全部小写)

  version 版本号(1.0.0)

  description 描述(Honor of kings server by Ewonder)

  point 入口(main.js)

  command、git repository、keywords(这三项可以不用填写)

  author 作者(填写自己即可)

  license 同意许可协议(按下回车键)

  Is this ok? (yes)这样就安装完成了。

  我们同样可以使用命令行"code .”(注意有点,表示当前项目),通过VS.Code打开项目工程。如下图所示:

  

  

  2. 安装包文件

  通过”npm install -g typescript”命令,全局安装typescript语言包,typescript是javascript的超集。

  typescript的用处:

  1.为了规范我们的书写格式,typescript是强类型语言,可以使整体脚本有强类型检查的优势,同时,如果对象被声明为any类型,就会忽略所有的类型检查,使得在一些细节问题上保持弱类型的灵活;

  2.由于typescript可以编译成明文javascript代码,通过tsc命令可进行编译。

  3. 项目配置文件

  在项目工程中创建tsconfig.json配置文件。tsconfig.json文件中指定了用来编译这个项目的根文件和编译选项。

  通过“tsc --init”命令行,可以直接创建出tsconfig.json配置文件,文件中包含了所有的编译选项,可以根据的需求,选取其中选项。本项目现阶段所需的编译选项及说明如下:

  编辑完成之后,在VS Code编辑器中启动调试(或点击快捷方式F5)执行,点击node.js选项会生成launch.json文件,这就是整个项目的启动入口。