Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

  1. #1
    Membre à l'essai
    Ram qui sature dû à une requête sous nodejs
    Bonsoir, j'aimerais savoir si vous avez déjà pu rencontrer ce problème.
    En effet, j'ai une application qui tourne en ejs ainsi que node js. La partie node me permet d'avoir une api.
    La partie ejs pour le rendu de mes pages. J'effectue une requête toute les 2 secondes :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    router.get('/', async (req: Request, res: Response) => {
      const instructionsObj = new Instruction(req.app.get('DB'))
      const instructions = await instructionsObj.getAll()
      const liveIOObj = new Live_IO(req.app.get('DB'))
      const livesIO = await liveIOObj.getAll(instructions.ui_Schema.value.value)
      res.header('Content-Type', 'application/json')
      res.json(livesIO)
    })


    et également :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    function livesValues(down) {
            const req = new XMLHttpRequest()
            req.open('GET', '/api/live_IO')
            req.responseType = 'json'
            req.send()
            req.onload = function () {
                draw(req.response, down)
                req.abort()
            }
        }

    Malheureusement j'ai des process qui tournent sur chrome, rien d'anormal, mais ensuite 3 d'entre eux grossisse, c'est très léger et sa ne se remarque pas sur pc, mais sur une raspberry avec 1go de ram, c'est problématique,
    car en une heure environ la ram est saturé et mon application est morte.
    Ma requête me renvoie des values sur un schéma et celles-ci sont refresh toutes les deux secondes. Elles sont de type json avec un status 200.

    Si l'un d'entre vous a une solution, je suis preneur .
    En vous remerciant par avance, je vous souhaite une agréable soirée !

  2. #2
    Expert éminent sénior
    bonjour je pense que le problème c'est que vous ouvrez une connection serveur, ça boucle indéfiniment parce que le framework doit créer des tas de threads donc il faut mieux gérer la connection
    La théorie, c'est quand on sait tout et que rien ne fonctionne.
    La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi.
    ( A Einstein)

  3. #3
    Membre à l'essai
    Ram qui sature dû à une requête sous nodejs
    Ton indication me semble juste mais bizarre. J'ai une connexion au server basique je dirais :
    Dans mon app.ts
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
     
    import express from 'express'
    import * as path from 'path'
    import cors from 'cors'
    import cookieSession from 'cookie-session'
    import { connect } from './libraries/Database'
    import Session from './middlewares/Session'
    import flash from 'express-flash'
    import routes from './Controllers'
    import config from './config.json'
     
     
    class App {
      public app: express.Application
     
      constructor() {
        this.app = express()
        this.config()
      }
     
      private async config() {
        this.app.set('config', config)
        this.app.set('DB', await connect(config.mysql))
        this.app.set('views', path.join(__dirname, 'views'))
        this.app.set('view engine', 'ejs')
        this.app.use(express.static(path.join(__dirname, 'public')))
        this.app.use(express.urlencoded({ extended: true }))
        this.app.use(cors())
        this.app.use(
          cookieSession({
            httpOnly: true,
            keys: ['key1', 'key2'],
            maxAge: 10 * 60 * 1000,
            name: 'session',
          })
        )
        this.app.use(Session)
        this.app.use(flash())
        this.app.use('/', routes)
      }
    }
     
    export default new App().app


    puis mon server.ts :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    import app from './app'
     
    const PORT = parseInt(process.env.PORT || '', 10) || 3000
     
    app.listen(PORT, () => {
      console.log('ProjetNode listen on port ' + PORT)
    })


    Tu me conseillerais de faire quelques chose de plus basique ou conventionnelle ? (faire tout passer par l'app et réarranger tout ça ?)

###raw>template_hook.ano_emploi###