2013-10-26 51 views
0

readme對於faye-websocket-ruby有以下示例。這是什麼代碼在機架中處理WebSocket連接

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

p()see hereKernel類的一個實例方法。它用於打印(如puts這樣做),但它在參數上調用inspect方法。它對於調試很有用,因爲你可以準確地看到值是什麼,因爲使用put將整數1打印爲"1",這不是它的原因。

每個機架申請必須向一個稱爲call方法接受環境env並返回形式

[http_code, headers, body] 

的陣列在上面的例子可以看到,App對象是lambda接受env響應並返回上述表單的數組。因此,鑑於lambda有一個方法call,它是一個Rack應用程序。

rack_response方法無非是返回一個機架兼容陣列,如您所見HERE

有關機架應用的更多信息HERE

+0

太棒了!還有'ws.rack_response'呢? – user782220