2015-10-06 19 views
0

我正在使用Faye和EventMachine來打開另一臺服務器的套接字。如果服務器未檢測到活動,則服務器超時。如何發送文件(二進制編碼),以便服務器不超時?在超時前發送websocket中的大文件

這是我有:

media_path = "/path/to/media/file" 

EM.run { 
    ws = Faye::WebSocket::Client.new(uri) 

    ws.on :open do |event| 
    puts "Opening socket" 
    ws.send(File.read(media_path)) 
    end 

    ws.on :message do |event| 
    puts "Recieving message" 
    end 

    ws.on :close do |event| 
    ws = nil 
    EM.stop 
    end 
} 

回答

1

你需要send your file in batches。類似的東西:

ws.on :open do |event| 
    puts "Opening socket" 
    File.open('filename','r') do |f| 
    ws.send(f.gets) 
    end 
end 

你解決的另一個問題是這樣的:你不會把你的整個文件在RAM +你會更快地發送。你可以閱讀約nodejs streams,有一個類似的操作原理。

+0

獲取可能會得到不一致的數據大小。考慮使用'f.read 65_536' - 64KB(2 ** 16)是一個體面的包裝尺寸,但你應該根據你的情況改變。 – Myst

+0

P.S.您只發送第一行。考慮添加'直到f.eof?' – Myst