我正在研究一個由服務器和多個客戶端組成的工具。 客戶端創建一個需要通過網絡套接字發送到服務器的散列。如何通過網絡套接字發送perl散列?
我以爲nstore將是正確的做法,但我找不到方法來檢索服務器上的數據。
誰能告訴我如何正確地做到這一點?
問候尼克
PS:我知道我可以在某種字符串格式的寫入數據,並重建它在服務器上,但如果能夠避免我想知道。
我正在研究一個由服務器和多個客戶端組成的工具。 客戶端創建一個需要通過網絡套接字發送到服務器的散列。如何通過網絡套接字發送perl散列?
我以爲nstore將是正確的做法,但我找不到方法來檢索服務器上的數據。
誰能告訴我如何正確地做到這一點?
問候尼克
PS:我知道我可以在某種字符串格式的寫入數據,並重建它在服務器上,但如果能夠避免我想知道。
發送:
Storable::nstore_fd(\%hash, $socket);
檢索:
my $ref = Storable::fd_retrieve($socket);
我認爲這是你需要。如果你不知道如何創建套接字 - 或者沒有一個協議來啓動這個 - ,那麼是一個更緊迫的問題,我想。前者參見IO::Socket::INET
。
謝謝!這就是我正在尋找的,我試圖使用nstore沒有fd ... – Nick
你可以結合Data :: Dump和eval。這個想法是序列化的數據結構(散),傳輸和解碼(評估):
$a = { ... }
$serializable_a = Data::Dump::dump($a)
# transmit && receive
$a_clone = eval($serializable_a_received) ;
這可能會解決,但如果安全性只有一點重要性或可能成爲(對於最項目)你絕對不應該這樣做。通過這種方式,任何人都可以將任意Perl代碼注入到服務器中並在會話中運行它... –
-1,'eval STRING'永遠不是通過網絡發送數據的有效選項。 –
難道你只是調用'Storable :: retrieve'或'Storable :: fd_retrieve'? – mkb
我會說「我知道我應該序列化數據」而不是「可以以某種方式寫入數據......」 – dave