C++ socket recv почему так медленно
недавно я встретил вопрос о функции recv программирования сокетов, позвольте мне представить предысторию вопроса ,
теперь у меня есть клиент и сервер на другом компьютере, клиент - это ОС Linux без какой-либо 3-й сетевой библиотеки, такой как ACE, curl ... и сервер - это ОС Windows - и я развернул http-сервер - Apache в моем проекте, Я отправлю HTTP-запрос от программирования сокетов на сервер, который является своевременным веб-сайтом php (примерно 1 раз в 2 секунды), и данные публикации инкаплюируются в формате Json, то есть http Content-Type: application / json, но когда я отправляю запрос, затем я получаю ответ в формате Json с сервера (на самом деле данные ответа не большие <5 * 1024), но в следующий, очень медленно, примерно более 10 секунд, тогда я могу получить ответ полностью , иногда не может быть никакого ответа Json, я полагаю, причина в том, что неподходящая длина буфера, я пробовал 1024, 2048, 512 ..., и результат разочаровал, ниже мой код recv, не могли бы вы помочь его увидеть ? заранее спасибо, кстати, я использую SOCK_STREAM в сокете
void Communication::receive(char buffer[], int BUFFER_SIZE){ static const int small_buf = 512; char buf[small_buf]; bzero(buf,small_buf); int length = 0; char* pp = buffer; do{ length = recv(socket_,buf,small_buf,0); if(length < 0) { connect_state_ = false; break; }else if(length == small_buf){ connect_state_ = true; memcpy(pp, buf, small_buf); pp = pp+small_buf; }else if(length < small_buf && length > 0) { connect_state_ = true; memcpy(pp, buf, length); pp = pp + length; }else if(length == 0) { break; } }while(length > 0); //merge the small_buf into a big buffer which is big enough (50*1024), which is one of function's param }
Что я уже пробовал:
Я изменил длину buf, 512, 1024 ,2048, даже я изменил SOCK_DGRAW, чтобы отправить json, а затем recv , но результат тот же , recv очень медленный , я использую синхронизацию для связи с php-сайтом на сервере apache
Mohibur Rashid
Вы уверены, что ваш запрос работает быстро?
Member 12601798
да, ответ сервера очень короткий , и я пишу серверный код