OpenResty搭建游戏服务器(二)整体认知

前面,已经将 "hello world" 跑起来了。

在考虑正式项目要怎么做之前,应该对服务器开发有一个初步的整体认识。

从我入门的角度来看,至少应该学习掌握的东西(后面再补充或更改):

具体内容暂时不展开来说。

________________________________ NRatel割 ________________________________

对于 openresty 的使用,

可以参考一些基于 openresty 的开源项目,如:openresty-china

另外,参考,openresty/lua-nginx-module 

如下图,openresty 提供了一系列 lua 的钩子函数,让你可以在不同的阶段做不同的事情
简单说就是:在这些钩子函数,完成自己的业务逻辑即可)。

这些钩子函数都可以在 nginx.conf 中以指令的方式配置生效。

说明表格:

Directive

contextphase简要说明

init_by_lua

init_by_lua_block

init_by_lua_file

httploading-config

当 Nginx 接收到 HUP 信号并开始重新加载配置文件时,Lua VM 也将被重新创建,此时,init_by_lua 将在新的 Lua VM 上再次运行。通常用于 预加载 Lua模块、初始化 lua_shared_dict shm 存储等。

init_worker_by_lua

init_worker_by_lua_block

init_worker_by_lua_file

httpstarting-worker

若主进程被启用,这个钩子在每个Nginx工作进程启动时运行。若主进程被禁用,这个钩子将在 init_by_lua 之后运行。通常被用于创建 单工作重复发生的计时器,如后端健康检查。

set_by_lua

set_by_lua_block

set_by_lua_file

server,

server if,

location,

location if

rewrite

可以将一些参数从 nginx.conf 传入Lua,并把处理结果从Lua中返回给 nginx.conf。

content_by_lua

content_by_lua_block

content_by_lua_file

location,

location if

content

充当内容处理程序。

rewrite_by_lua

rewrite_by_lua_block

rewrite_by_lua_file

http, server,

location,

location if

rewrite tail

充当重写阶段处理程序,用于实现复杂的转发/重定向等功能。

access_by_lua

access_by_lua_block

access_by_lua_file

http, server,

location,

location if

access tail

充当访问阶段处理程序。

header_filter_by_lua

header_filter_by_lua_block

header_filter_by_lua_file

http, server,

location,

location if

output-header-filter

处理响应头,如设置header等。

例:ngx.header.Foo = "blah"。

body_filter_by_lua

body_filter_by_lua_block

body_filter_by_lua_file

http, server,

location,

location if

output-body-filter

处理响应数据,比如截断、替换等。

输入数据块通过 ngx.arg[1](Lua字符串值)传递,标示响应体数据流结束的 “eof”标志 通过 ngx.arg[2](Lua布尔值) 传递。

例:转换响应体中的所有小写字母,ngx.arg[1] = string.upper(ngx.arg[1])。

log_by_lua

log_by_lua_block

log_by_lua_file

http, server,

location,

location if

loglog阶段处理,如记录访问量/统计平均响应时间等。

balancer_by_lua_block

balancer_by_lua_file

upstreamcontent作用于upstream上,作为其均衡器运行。

ssl_certificate_by_lua_block

ssl_certificate_by_lua_file

serverright-before-SSL-handshake

当Nginx准备启动下游 SSL (https) 连接的 SSL握手时执行。用例:SSL握手流量控制、拒绝使用了低版本SSL协议的客户端连接等。

ssl_session_fetch_by_lua_block

ssl_session_fetch_by_lua_file

httpright-before-SSL-handshaketodo

ssl_session_store_by_lua_block

ssl_session_store_by_lua_file

httpright-after-SSL-handshaketodo

________________________________ NRatel割 ________________________________

我当前的 nginx.conf:

user nratel;                    # 指定nginx用户
pid tmp/nginx.pid;              # 指定worker进程ID保存文件的位置
worker_processes 1;             # 指定worker进程数
error_log logs/error.log;       # 指定错误日志位置

events {
    worker_connections 1024;    # 每个工作进程的最大连接数
}

http {
    include ./mime.types;       # 根据请求文件的后缀名,匹配决定HTTP Response的Content-Type

    sendfile on;                # 设置为on表示启动高效传输文件的模式  
    keepalive_timeout 65;       # 完成请求后保持连接
    charset utf-8;              # 字符编码
    lua_code_cache off;         # lua代码缓存,off方便热调试,生产环境需设为on
    
    lua_package_path '${prefix}/app/lualib/?.lua;;';        # 设置Lua扩展库的搜寻路径(';;' 中的空,指默认路径, 指从${prefix}开始查找)
    lua_package_cpath '${prefix}/app/luaclib/?.so;;';       # 设置C编写的Lua扩展模块的搜寻路径(';;' 中的空,指默认路径, 指从${prefix}开始查找)

    init_by_lua_file            ./app/phase/init.lua;
    init_worker_by_lua_file     ./app/phase/init_worker.lua;

    server {                    # 定义虚拟主机
        listen 81;              # 监听端口。游戏服不占用80端口
        server_name game-dev;   # 监听域名。虚拟服务器的识别路径
        
        location /game {
            set_by_lua_file                 $_ ./app/phase/set.lua;      #根据传入变量做不同处理,类似于加宏
            rewrite_by_lua_file             ./app/phase/rewrite.lua;
            access_by_lua_file              ./app/phase/access.lua;

            content_by_lua_file             ./app/phase/content.lua;         
            header_filter_by_lua_file       ./app/phase/header_filter.lua;   
            body_filter_by_lua_file         ./app/phase/body_filter.lua;

            log_by_lua_file                 ./app/phase/log.lua;   
        }
    }    
}

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

NRatel

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值