Оптимизация сокетов в Symbian - PullRequest
1 голос
/ 25 августа 2009

У меня открыто TCP-соединение между Symbian и сервером, и я хотел бы передавать огромные порции данных (около 32 КБ) между этими двумя конечными точками. Unfortuantely, показатели производительности довольно плохие, и я ищу идеи, как я мог бы улучшить моя реализация. Одна из вещей, которую я попробовал, заключалась в увеличении количества байтов, которые могут быть буферизуется сокетом для отправки и получения на 64K.

iSocket.SetOpt(KSoTcpSendWinSize, KSolInetTcp, 0x10000);        
iSocket.SetOpt(KSoTcpRecvWinSize, KSolInetTcp, 0x10000);

Есть ли другие вещи, которые можно оптимизировать на уровне сокетов для повышения пропускной способности?

Также возможно, что мой код сокета делает что-то глупое. Следует простой запрос / ответ протокол. Я должен использовать блокирующую процедуру WaitForRequest, чтобы убедиться, что данные были отправлены / получены так что я могу обработать его тогда.

//store requestinfo in reqbuf and send it to server; wait for iStatus
iSocket.Send( reqbuff, 0, iStatus, len );               
User::WaitForRequest(iStatus);

//store 32K file in resbuff; wait for iStatus to be sure that all data has
//been received
iSocket.Recv(resbuff, 0, iStatus, len);
User::WaitForRequest(iStatus);  
//do something with the 32K received

Буду благодарен за каждый комментарий!

Ответы [ 2 ]

1 голос
/ 26 августа 2009

Вы можете отправлять и получать параллельно, если вы используете активные объекты. В SDK должен быть пример кода. Очевидно, это зависит от используемого приложения и протокола, поможет ли это.

Я не эксперт по TCP, но я думаю, что в сокете есть параметры, которые могут привести к тому, что ваш шаблон использования (отправка одного большого буфера, затем получение большого буфера) не будет оптимально использовать сеть по сравнению с отправкой примерно равных количеств данных в обоих направлениях. Все, что касается TCP-сокетов, которые можно настроить в других ОС: также можно настроить на Symbian, но сначала вам нужно выяснить, что именно. Я предлагаю вам задать еще один вопрос, который является общим для TCP, и получить несколько советов. Затем вы можете выяснить, как настроить это в Symbian.

0 голосов
/ 25 августа 2009

Вы уверены, что

// сделать что-то с полученным 32K

не занимает много времени? Ваше приложение выглядит однопоточным, поэтому, если оно задерживает линию, это очевидное узкое место.

Кроме того, что вы подразумеваете под низкой производительностью? Вы сравнивали производительность с другими приложениями tcp?

Наконец, если производительность является большой проблемой, вы можете переключиться на необработанные сокеты / датаграммы и оптимизировать собственный протокол проверки для ваших конкретных данных.

...