Node.js: ответы направляются нужному пользователю? - PullRequest
0 голосов
/ 07 сентября 2011

Допустим, у меня есть этот простой код, который отвечает файлом .XML.

app.post '/incoming', (req,res) ->
    console.log "Hello, incoming call!"
    message = req.body.Body
    from = req.body.From

    sys.log "From: " + from + ", Message: " + message 

    test = "hello"
    r = new Twiml.Response()
    r.append(new Twiml.Say('Hello, there!' + test + ' Enter your ATM card PIN'))
    console.log(r.toString())

    res.send r.toString()

Возможно ли, что если 2 запроса приходят одновременно, один получает неправильный ответ? Я спрашиваю об этом, потому что я не до конца понимаю, как работает асинхронность и выполняет ли я то, что я хочу.

Спасибо

Ответы [ 2 ]

2 голосов
/ 07 сентября 2011

То, что вы спрашиваете, на самом деле является вопросом о области действия CoffeeScript. Когда у вас есть функция, например,

(req, res) ->

тогда внутри этой функции вы можете быть уверены, что req и res всегда будут указывать на объекты, которые были переданы в функцию. Единственное исключение - если у вас есть вложенная функция с одинаковыми именами аргументов. Например,

(req, res) ->
  setTimeout ((req, res) -> console.log req, res), 1

будет отображать undefined, undefined, когда внешняя функция вызывается с любыми значениями, потому что функция, переданная в setTimeout, имеет свои req и res аргументы, которые shadow внешний req и res.

Очевидно, что вы этого не делаете (и хорошо, что не должны), так что вам не о чем беспокоиться. Ваш сервер может пропинговать десятки тысяч раз в секунду, и каждый req и res останутся разными.

2 голосов
/ 07 сентября 2011

Если вы хотите узнать, на какой клиент отправляется ответ, удалите весь код из тела, кроме кода, взаимодействующего с res, например:

app.post '/incoming', (req,res) ->
    res.send r.toString()

Теперь вы видите, что вы отправляете r.toString() на правильный ответ.

Возможно ли, что если 2 запроса приходят одновременно,

Даже если одновременно поступают 2 запроса, javascript является однопоточным и блокирует, поэтому не возникает никаких условий гонки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...