代码之家  ›  专栏  ›  技术社区  ›  user782220

处理机架中的WebSocket连接

  •  0
  • user782220  · 技术社区  · 11 年前

    这个 readme 对于 faye-websocket-ruby 具有以下示例。代码行是什么

    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 回复  |  直到 11 年前
        1
  •  2
  •   Gerry    11 年前

    p() 是的实例方法 Kernel see here 。用于打印(如 puts 确实如此),但它调用 inspect 方法。它对调试很有用,因为您可以确切地看到值是什么,因为使用put将整数1打印为 "1" 事实并非如此。

    每个机架应用程序都必须响应一个名为 call 接受环境 env 并返回形式的数组

    [http_code, headers, body]
    

    在上面的例子中,您可以看到 App 对象是 lambda 接受 环境 并返回上述形式的数组。因此,如果 λ 有一个方法 呼叫 .

    这个 rack_response 方法只不过是返回一个机架兼容的数组,正如您所看到的 HERE .

    有关机架应用程序的更多信息 HERE .