Отправка пакетов данных через UDP - PullRequest
1 голос
/ 24 февраля 2012

Я пытаюсь отправить скалярное значение через сокет, который я получил с помощью nfreeze из хранимой.Шаг за шагом:

  1. Я получаю скаляр $serializedHash = nfreeze \%hash;
  2. Я хочу отправить его через сокет $sendSocket->send($serializedHash);

Это прекрасно работает, так какпока скаляр $serializedHash не больше 1024 байта.Потому что с другой стороны у меня есть сокет, который может принимать данные только с макс.длина 1024 байта.Я также не могу сохранить $serializedHash в файле, а затем обработать его с помощью sysread и syswrite.

Чего я не хочу, так это отправлять каждую строку на сокет, поскольку мой хэш имеет более 2миллион записей.Элемент хэша разделен \n, поэтому я попытался использовать функцию split, но затем у меня есть массив с 2 миллионами записей.

Как я могу отправлять данные в пакетах через сокет UDP?

1 Ответ

3 голосов
/ 24 февраля 2012

Вы можете обработать ваш сериализованный хеш порциями, например:

while ($serializedHash =~ /(.{1,1024})/sg) {
  my $chunk = $1;
  # sending $chunk
}
...