[转]PHP vs Node.js vs Nginx-Lua

本文探讨了在游戏行业背景下,使用 ngx_lua 构建开放API代理服务器的可行性与优势,对比了 ngx_lua、Node.js 和 PHP 的性能表现,强调了 ngx_lua 在CPU和内存效率上的卓越性能,以及其对数据库的支持,最终选择 ngx_lua 作为解决方案的理由。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

背景:Lua在游戏行业比较火,不少公司在用它。
最近公司在考虑做openapi的proxy服务器,公司主营网游,旗下多款游戏的用户登陆,充值等等有很多接口,想聚合分散的接口统一走一个通道,所以都要走这上面,压力不小。
在语言和平台上主要在nodejs和ngx_lua中选择,当然最后还是选择了ngx_lua放弃了nodejs的方案,主要原因:
1、主要考虑公司会nodejs的人貌似就我一个,会累死我的
2、对于ngx的运维和配置相对比nodejs来说更加熟悉和有经验
3、从各种性能测试来说ngx_lua似乎在CPU和内存上更胜一筹

我在研究一阵子ngx_lua之后发现lua语法和js真的很像,同时ngx_lua模型也是单线程的异步的事件驱动的,工作原理和nodejs相同,代码甚至比nodejs的异步回调更好写一些。

性能测试,100并发
php:17400
nodejs:31197
ngx_lua:32628

单纯做http代理服务器加上一些简单的逻辑,似乎ngx_lua的方案更加合适,同时ngx_lua还支持redis、mysql等数据库的支持。

最后附上PHP vs Node.js vs Nginx-Lua性能测试,转载的
http://bluehua.org/demo/php.node.lua.html
user www www; worker_processes auto; error_log /www/wwwlogs/nginx_error.log crit; pid /www/server/nginx/logs/nginx.pid; worker_rlimit_nofile 51200; stream { log_format tcp_format '$time_local|$remote_addr|$protocol|$status|$bytes_sent|$bytes_received|$session_time|$upstream_addr|$upstream_bytes_sent|$upstream_bytes_received|$upstream_connect_time'; access_log /www/wwwlogs/tcp-access.log tcp_format; error_log /www/wwwlogs/tcp-error.log; include /www/server/panel/vhost/nginx/tcp/*.conf; } events { use epoll; worker_connections 51200; multi_accept on; } #rtmp_auto_push on; #RTMP 服务 http { include mime.types; #include luawaf.conf; include proxy.conf; lua_package_path "/www/server/nginx/lib/lua/?.lua;;"; default_type application/octet-stream; server_names_hash_bucket_size 512; client_header_buffer_size 32k; large_client_header_buffers 4 32k; client_max_body_size 50m; sendfile on; tcp_nopush on; keepalive_timeout 60; tcp_nodelay on; fastcgi_connect_timeout 300; fastcgi_send_timeout 300; fastcgi_read_timeout 300; fastcgi_buffer_size 64k; fastcgi_buffers 4 64k; fastcgi_busy_buffers_size 128k; fastcgi_temp_file_write_size 256k; fastcgi_intercept_errors on; gzip on; gzip_min_length 1k; gzip_buffers 4 16k; gzip_http_version 1.1; gzip_comp_level 2; gzip_types text/plain application/javascript application/x-javascript text/javascript text/css application/xml application/json image/jpeg image/gif image/png font/ttf font/otf image/svg+xml application/xml+rss text/x-js; gzip_vary on; gzip_proxied expired no-cache no-store private auth; gzip_disable "MSIE [1-6]\."; limit_conn_zone $binary_remote_addr zone=perip:10m; limit_conn_zone $server_name zone=perserver:10m; server_tokens off; access_log off; server { listen 9091; server_name phpmyadmin; index index.html index.htm index.php; root /www/server/phpmyadmin; location ~ /tmp/ { return 403; } #error_page 404 /404.html; include enable-php.conf; location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ { expires 30d; } location /node/uploads/ { alias /www/wwwroot/121.43.231.156/node/uploads/; # 指向实际的文件存储目录 try_files $uri $uri/ =409; } location ~ .*\.(js|css)?$ { expires 12h; } location ~ /\. { deny all; } access_log /www/wwwlogs/access.log; } include /www/server/panel/vhost/nginx/*.conf; } 访问9091服务器报403
最新发布
03-11
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值