【问题标题】:Node.js: Is the responses going to the right user?Node.js:响应是否发送给正确的用户?
【发布时间】:2011-09-06 21:14:53
【问题描述】:

假设我有一个用 .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 个请求同时出现,一个会得到错误的响应?我问这个是因为我不完全理解异步是如何工作的,以及这是否正在做我想做的事情。

谢谢

【问题讨论】:

  • @Raynos,实际上我没有。我在这里和那里摸过,但没有什么很复杂的。

标签: javascript node.js coffeescript


【解决方案1】:

如果您想知道响应发送到哪个客户端,请从正文中删除所有代码,除了与res 交互的代码,如下所示:

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

现在您可以看到您发送r.toString() 到正确的响应。

有没有可能如果2个请求同时到来,

即使同时有 2 个请求,javascript 也是单线程和阻塞的,因此永远不会有任何竞争条件。

【讨论】:

    【解决方案2】:

    您要问的是关于 CoffeeScript 范围的问题。当你有一个函数时,例如

    (req, res) ->
    

    然后在该函数中,您可以确信req 和res 将始终指向传入函数的对象。唯一的例外是如果您有一个具有相同参数名称的嵌套函数。例如,

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

    当使用任何值调用外部函数时,将显示undefined、undefined,因为传递给setTimeout 的函数有自己的req 和res 参数,阴影外层req 和res。

    显然你没有这样做(而且你不应该这样做),所以你不必担心。您的服务器每秒可以被 ping 数万次,并且每个 req 和 res 将保持不同。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-09-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多