Как узнать, сколько я должен читать из сокета? - PullRequest
1 голос
/ 19 мая 2011

В .NET есть свойство DataAvailable в сетевом потоке и свойство Available в клиенте tcp.
Однако Silverlight не хватает тех. Должен ли я отправить заголовок с длиной сообщения? Я бы предпочел не тратить ресурсы сети.
Есть ли другой способ?

Ответы [ 2 ]

1 голос
/ 19 мая 2011

Вы микрооптимизируете. Как вы думаете, почему еще 4 байта повлияют на производительность?

Другими словами: используйте заголовок длины.

Обновление

Я видел твой комментарий к другому ответу. Вы используете BeginRead неправильно. Он никогда не будет блокировать или ждать, пока весь буфер не будет заполнен.

Вы должны объявить буфер, который может принимать все ваше сообщение. Возвращаемое значение из EndRead сообщит о количестве полученных байтов.

Вы также должны знать, что TCP основан на потоке. нет гарантирует, что все ваше сообщение JSON будет получено сразу (или что будет получено только ваше первое сообщение). Поэтому у вас должен быть какой-то способ узнать, когда сообщение завершено.

И еще раз говорю: длина заголовка вряд ли повлияет на производительность.

0 голосов
/ 19 мая 2011

Что вы подразумеваете под «ненужными сетевыми ресурсами»? Каждый API чтения сети, который мне известен, каким-то образом возвращает фактическое число прочитанных байтов. В чем здесь проблема?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...