Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Работа с сокетами, не ишутся данные при определенном размере чанков
Форумы портала PHP.SU » » Работа с сетью » Работа с сокетами, не ишутся данные при определенном размере чанков

Страниц (1): [1]
 

1. delta_beta - 17 Марта, 2014 - 12:34:47 - перейти к сообщению
Нужно передать сообщение через сокет. Сообщение большое и поэтому разбивается на куски. Вопрос вот в чем. Если передается 125 кусков сообщения, то оно записывается нормально, а если 131, то уже не пишется, хотя сокет никакой ошибки не выдает и возвращает успешный результат.
Вот часть кода:
PHP:
скопировать код в буфер обмена
  1. $messageId = $this->getMessageId();
  2.  
  3.             // Split the message into chunks
  4.             $messageChunks = $this->getMessageChunks($preparedMessage);
  5.             $messageChunksCount = count($messageChunks);
  6.  
  7.             // Send chunks to graylog server
  8.             foreach(array_values($messageChunks) as $messageChunkIndex => $messageChunk) {
  9.                     $bytesWritten = $this->writeMessageChunkToSocket(
  10.                     $socket,
  11.                     $messageId,
  12.                     $messageChunk,
  13.                     $messageChunkIndex,
  14.                     $messageChunksCount
  15.                 );
  16.  
  17.                 if(false === $bytesWritten) {
  18.                     // Abort due to write error
  19.                     return false;
  20.                 }
  21.             }

где
PHP:
скопировать код в буфер обмена
  1. protected function writeMessageChunkToSocket($socket, $messageId, $messageChunk, $messageChunkIndex, $messageChunksCount) {
  2. return @fwrite(
  3. $socket,
  4. $this->prependChunkInformation($messageId, $messageChunk, $messageChunkIndex, $messageChunksCount)
  5. );
  6. }

и
PHP:
скопировать код в буфер обмена
  1.  
  2. protected function prependChunkInformation($messageId, $data, $sequence, $sequenceSize) {
  3. if(!is_string($data) || $data === '') {
  4. throw new \InvalidArgumentException('Data must be a string and not be empty.');
  5. }
  6.  
  7. if(!is_integer($sequence) || !is_integer($sequenceSize)) {
  8. throw new \InvalidArgumentException('Sequence number and size must be integer.');
  9. }
  10.  
  11. if($sequenceSize <= 0) {
  12. throw new \InvalidArgumentException('Sequence size must be greater than 0.');
  13. }
  14.  
  15. if($sequence > $sequenceSize) {
  16. throw new \InvalidArgumentException('Sequence size must be greater than sequence number.');
  17. }
  18.  
  19. return pack('CC', 30, 15) . substr(md5($messageId, true), 0, 8) . pack('CC', $sequence, $sequenceSize) . $data;
  20. }



подскажите пожалуйста в чем может быть проблема.

 

Powered by ExBB FM 1.0 RC1