typescript基于nodejs开发游戏服务器

为什么要用nodejs开发游戏服务器。

首先,nodejs生态开源的资源和库很多,很多功能都用现成的组件,稳健又高效。

其次,能和客户端统一语言(客户端用cocos creator typescript 开发的),同一种语言的话,这样一来就数据模块还有逻辑代码就可以共享,提高效率的同时也保证了两边逻辑的一致性。

再者,部署方便,服务器开发完成之后,通过webpack打包成一个js文件,云服务器上部署非常方便。

部署准备;

第一步,安装nodejs和typescript,再安装vscode 的时候,一般都给顺带安装了,所以比较简单

第二步,更改npm源镜像

npm config set registry https://registry.npm.taobao.org

默认的镜像再国外,很慢,很不稳定,毕竟是在墙外面。

npm config get registry  通过这个命令可以查看更改成功后的源镜像

第三步,把typescript 更新一下,我一般是要更新到最新的,如果不是最新,后面安装某些库的时候会报错.

npm update -g typescript 

tsc -v  查看typescript 编译器版本

建立文件夹结构:


项目结构

这里主要讲

project2020

         -----Server

                ----Common

                ----Shared

                ----CenterServer

                ----GateServer

解释: centerServer 是中心服务器,GateServer是网关服务器,后续还有更多其他服务器,并列的结构。这里的Common用来存放服务器之间的共享代码,Shared用来存放和客户端的共享代码。

我把Server作为根目录。

第一步 控制台cd 到Server目录,执行 npm init 会产生package.json这个文件,由于我们最终不是发布包(我们会用webpack打包成一个js文件),所以其实这个一步不用也可以,不是刚需,但是为了更正规一点,我们还是这么操作一下,打包带时候还是派上用场了。

第二步,tsc --init 这个会生成tsconfig.json,这个就是编译ts的配置文件,定义怎么编译我们的项目里面会有很多字段,详细的解释参看tsconfig注解

关于编译:在当前目录下 执行tsc -p ./ 就可以编译我们的ts脚本了,命令的最后一部分是一个路径,只想tsconfig所在的位置,按照tsconig里的配置来编译文件。当tsconfig里面watch字段配置成true的话,就可以实现增量编译,也就是改动了即时编译,很好用。

关于vscode调试,第一次点vscode 的调试按钮会提示我们创建launch.json 创建好之后就可以了,修改内容为

{

    // Use IntelliSense to learn about possible attributes.

    // Hover to view descriptions of existing attributes.

    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387

    "version": "0.2.0",

    "configurations": [

        {

            "type": "node",

            "request": "launch",

            "name": "gateSvr",

            "program": "${workspaceFolder}/Server/build/GateServer/GateSvr.js",

        },

      {

        "type": "node",

        "request": "launch",

        "name": "CenterSvr",

        "program": "${workspaceFolder}/Server/build/CenterServer/centerSvr.js",

        //"program": "${workspaceFolder}/Server/dist/bundle.js",

        //"preLaunchTask": "tsc: build - tsconfig.json",

        //"outFiles": ["${workspaceFolder}/Server/build/**/*.js"]

      }

    ]

}

我创建了两个一个是gatesvr的调试,一个是centerSvr的调试,后面还可以其他server了。

注意一下就是 tsconfig里面的sourcemap 要打开 设置成true,这样才可以断点调试

这里的program我直接指向了 编译生成后的服务器js文件,没有用preLaunchTask。

在开发的过程中我 tsconfig的watch选项开着,所以几乎是实时增量编译,调试直接启动一样,很方便的。

最后就是打包

安装webpack,instal webpack --save-dev 。

--save的意思是添加到package.josn的依赖项里面,--save-dev表示添加到package.josn的开发模式下的依赖项里面,这个试一下就可以了。因为最终我们不会刚性使用package.json,所以也不是很重要,但是为了正规起见,还是这么操作一下吧。

然后再在server目录下建立一个webpack.config.js的文件,内容如下:

```

const path = require('path');

module.exports = {

  entry: { center : './build/CenterServer/centerSvr.js',

          gate : "./build/GateServer/GateSvr.js"

},

  target: 'node',

  //devtool: 'inline-source-map',

  resolve: {

    extensions: [ '.tsx', '.ts', '.js' ],

  },

  output: {

    filename: '[name].js',

    path: path.resolve(__dirname, 'dist'),

  },

};

```

入口点我设置了多个,entry 的值可以个json对象,里面的key 是自定义的,上面的center,gate是我随便写的,不是配置文件的关键字,后面还要加dbserver,但是value 不是随便写的,需要指向真实想生成的入口文件。

output里面的 filename字段,因为我是要生成多个文件,所以用了[]。

然后回到cmd,cd 到server这个目录下,执行 webpack 回车,就可以开始打包了。一次运行打包所有服务器。

至此,工作流定型了,tsconfig开启watch,和 sourcemap ,实现改动就会编译,配合launch.json ,拥有断点调试功能,最后开放完成发布版本的时候,执行webpack命令完成打包。

以上是我个人的工作流程,不是最优的,只是我觉的简单够用。webpack可以做到直接从ts打包调试,我不折腾了,毕竟我也不是天天打包,发版本的时候才打包。

最后说一下安装依赖项的问题,因为是ts 我们需要代码提示,要安装实现文件和提示文件。比如安装lodash

npm install lodash --save  

npm install @types/lodash 

npm install --save-dev @types/node

上面是安装实现文件,后面是安装提示文件。

@types/  这是一个固定格式 后面跟着库的名字。

websocket 模块我用了ws,此模块的周下载量是百万级的,用的人蛮多。

npm install ws --save

 npm install @types/ws --save-dev

最后需要知道,编译器在解析文件的时候的搜索路径,

import { sharedTest } from "../Shared/shared";

import * as _ from "lodash"

注意这两个是不一样的,一个是带路径的,一个是不带的,不带的就是我们的库,会搜索当前目录下的node_module文件夹,没找到继续上层找node_module,直到根目录还是没有,就会取node的全局安装目录的node_module里面找。在node_module文件里面也是有搜索规则的,因为我们都是用第三方库,也不会改里面的东西,所以不深究也没关系。

好了,先这么多吧,后面有需要再补充吧

你可能感兴趣的:(typescript基于nodejs开发游戏服务器)