Как отправить хэш perl через сетевой сокет? - PullRequest
1 голос
/ 08 декабря 2011

Я работаю над инструментом, который состоит из сервера и нескольких клиентов. Клиенты создают хэш, который необходимо отправить на сервер через сетевой сокет.

Я думал, что nstore будет правильным решением, но я не смог найти способ получить данные на сервере.

Может кто-нибудь сказать мне, как правильно это сделать?

С уважением, Ник

PS: я знаю, что мог бы записать данные в каком-то формате строки и восстановить их на сервере, но мне интересно, можно ли этого избежать.

Ответы [ 3 ]

6 голосов
/ 08 декабря 2011

Отправить:

Storable::nstore_fd( \%hash, $socket );

Получить:

my $ref = Storable::fd_retrieve( $socket );

Я думаю, это все, что вам нужно.Если вы не знаете, как создать сокет - или у вас нет протокола для его инициирования - , что - более насущная проблема, я бы подумал.См. IO::Socket::INET для первого.

5 голосов
/ 08 декабря 2011

В качестве альтернативы уже опубликованным решениям вы можете использовать YAML или JSON .

0 голосов
/ 08 декабря 2011

вы можете объединить Data :: Dump и eval.Идея состоит в том, чтобы сериализовать вашу структуру данных (хэш), передать и декодировать (оценить):

$a = { ... }
$serializable_a = Data::Dump::dump($a)

# transmit && receive

$a_clone = eval( $serializable_a_received ) ;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...