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

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

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Описание: Нужно передать сообщение через сокет. Сообщение большое и поэтому разбивается на куски. Вопрос вот в чем. Если передается 125 кусков сообщения, то оно записывае
delta_beta
Отправлено: 17 Марта, 2014 - 12:34:47
Post Id


Новичок


Покинул форум
Сообщений всего: 1
Дата рег-ции: Март 2014  


Помог: 0 раз(а)




Нужно передать сообщение через сокет. Сообщение большое и поэтому разбивается на куски. Вопрос вот в чем. Если передается 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. }



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

(Отредактировано автором: 17 Марта, 2014 - 12:37:45)

 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Работа с сетью »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB