处理Rack中的WebSocket连接

时间:2013-10-26 06:55:48

标签: ruby websocket rack faye

faye-websocket-ruby的{​​{3}}具有以下示例。什么是代码行

p [:close, event.code, event.reason]

p是什么意思? ws.rack_response做了什么以及为什么有必要?

# app.rb
require 'faye/websocket'

App = lambda do |env|
  if Faye::WebSocket.websocket?(env)
    ws = Faye::WebSocket.new(env)

    ws.on :message do |event|
      ws.send(event.data)
    end

    ws.on :close do |event|
      p [:close, event.code, event.reason]
      ws = nil
    end

    # Return async Rack response
    ws.rack_response

  else
    # Normal HTTP request
    [200, {'Content-Type' => 'text/plain'}, ['Hello']]
  end
end

1 个答案:

答案 0 :(得分:1)

p()Kernelsee here的实例方法。它用于打印(如puts),但它在参数上调用inspect方法。它对于调试很有用,因为你可以准确地看到值是什么,因为使用puts,整数1将打印为"1",而不是它。

每个Rack应用程序必须响应一个名为call的方法,该方法接受环境env并返回一个表单数组

[http_code, headers, body]

在上面的示例中,您可以看到App对象是lambda接受env并返回上述表单的数组。因此,如果lambda具有方法call,则它是Rack应用程序。

rack_response方法只会返回机架兼容阵列,因为您可以看到HERE

有关Rack应用程序的更多信息HERE