gpt4 book ai didi

node.js - 增加每秒响应数

转载 作者:搜寻专家 更新时间:2023-10-31 23:52:24 25 4
gpt4 key购买 nike

我有一款安卓游戏,有 40,000 名在线用户。每个用户每 5 秒向服务器发送一次请求。

我为测试请求编写了这段代码:

const express = require('express')  
const app = express()
const pg = require('pg')
const conString = 'postgres://postgres:123456@localhost/dbtest'

app.get('/', function (req, res, next) {

pg.connect(conString, function (err, client, done) {
if (err) {

return next(err)
}
client.query('SELECT name, age FROM users limit 1;', [], function (err, result) {
done()

if (err) {

return next(err)
}

res.json(result.rows)
})
})
})
app.listen(3000)

Demo

为了用 40,000 个请求测试这段代码,我编写了这段 ajax 代码:

for (var i = 0; i < 40000; i++) {
var j = 1;
$.ajax({
url: "http://85.185.161.139:3001/",

success: function(reponse) {
var d = new Date();
console.log(j++, d.getHours() + ":" + d.getMinutes() + ":" + d.getSeconds());
}
});
}

服务器详细信息(我知道这很差) enter image description here

问题:

  1. 此代码(node js)每秒仅响应 200 个请求!

  2. 如何改进我的代码以增加每秒响应数?

  3. 这种模拟 40,000 在线用户的方式(ajax)是否正确?

  4. 我用套接字好还是不好?

最佳答案

您应该使用 Divide&Conquer 算法来解决此类问题。找到资源效率最低的操作,并尝试替换或减少对其的调用量。

我在这里看到的主要问题是服务器在每次请求时打开与数据库的新连接,这可能占用大部分时间和资源。

我建议在服务器启动时打开连接并在请求中重用它。

const express = require('express')  
const app = express()
const pg = require('pg')
const conString = 'postgres://postgres:123456@localhost/dbtest'
const pgClient

pg.connect(conString, function (err, client, done) {
if (err) {
throw err
}
pgClient = client
})

app.get('/', function (req, res, next) {
pgClient.query('SELECT name, age FROM users limit 1;', [], function (err, result) {
if (err) {
return next(err)
}

res.json(result.rows)
})
})
app.listen(3000)

要进行正确的压力负载测试,最好使用专门的实用程序,例如 Apache 的 ab。最后,套接字更适合快速、小的数据传输,但请记住它在扩展方面存在问题,并且在大多数情况下在 10K+ 并发连接时变得非常低效。

编辑:正如@robertklep 所指出的,在这种情况下最好使用 client pooling,并从池中检索客户端。

关于node.js - 增加每秒响应数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39178019/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com