LINUX.ORG.RU

На чем сейчас многопоточные TCP сервера на си++ пишут

 


0

4

Добрый день, много лет назад писал простенькие сетевые приложения на си, затем было Qt с их TcpSocket, потом boost asio, трогал все это добро палкой лет 5 назад. Сейчас возникла потребность в создании многопоточного сервера на си++. Какие библиотеки для этого сейчас модно и молодежно использовать. Решил глянуть по hh.ru что там требуют. boost, asio, poco вообще как-то не в почете. На чем сейчас это все делают и какую книжку почитать? Все что нашел это пара книг по си++ и ACE, но они кажется устарели.


Ответ на: комментарий от RazrFalcon

У меня не вебсервер,мне хватит просто на клиент кинуть хоть в символьном виде «CMD:REBOOT»

da17
() автор топика
Ответ на: комментарий от Harald

Да, libevent использовал тоже, там проблем замечено не было. Правда такой момент: libuv под линуксом гонял, а libevent под фряхой.

DELIRIUM ☆☆☆☆☆
()
Ответ на: комментарий от DELIRIUM

Ъ линуксоиды пишут на perl

#!/usr/bin/perl

package Net::Server::CMD;

use strict; 
use warnings;
use base qw(Net::Server::PreFork);

sub process_request {   
   my $self = shift;    
   while (<STDIN>) {    # Net::Server дает нам сокет как STDIN + STDOUT!
      print "CMD:REBOOT"; # Просто отвечаем на любой запрос клиента.
   }
}
1;
Miha
()

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

anonymous
()

Чисто сетевые операции модно на всяких асинхронных libuv, libev делать. Но у тебя какая нагрузка? Может, достаточно обычных блокирующих сокетов и тред пула?

turtle_bazon ★★★★★
()
Ответ на: комментарий от da17

У меня когда такая потребность возникла я его на CL написал. :)

turtle_bazon ★★★★★
()
Ответ на: комментарий от Miha

Я пишу на перле, да) но все-таки в основном на сях и крестах.

DELIRIUM ☆☆☆☆☆
()
Ответ на: комментарий от da17

с такой нагрузкой любой велосипедный говнокод справится
приходите когда будет хотя бы 10 тыс

anonymous
()
Ответ на: комментарий от da17

Такую логику лучше в отдельных потоках обработать на синхронных сокетах, наверное. Меньше возможности ошибиться.

turtle_bazon ★★★★★
()
Ответ на: комментарий от da17

Я не совсем понял, что такое лонг-поллинг, но спасибо.

Тут правильнее звучит так: «Но спасибо, не надо». У тебя клиенты кто? Какие-нибудь тупые ардуины или там линукс нормальный есть?

turtle_bazon ★★★★★
()
Ответ на: комментарий от DELIRIUM

У меня не дохнет. Хотя, у меня к нему есть другие претензии. И под нагрзукой libev интереснее. Но у ТС нагрузки то особо нет.

turtle_bazon ★★★★★
()
Ответ на: комментарий от Miha

А у него тоже можно подписаться и ждать пока придут данные. Точнее, повесить коллбек на получение сообщения. И в этом коллбеке обработать.

turtle_bazon ★★★★★
()
Ответ на: комментарий от DELIRIUM

Ну если появится, то и не грех переписать. Хотя я не знаю его условия. Но обычно написать быстрее важнее. А потом переписать.

turtle_bazon ★★★★★
()
Ответ на: комментарий от turtle_bazon

Частота опроса, я хотел бы что бы сервер мог прям сразу отправить клиенту команду. Т.е. как я это изначально видел. 1. Клиент устанавливает соединение с сервером. 2. Сервер по некоторому (внутреннему) событию отправляет (путем записи в сокет) команду клиенту.

da17
() автор топика
Ответ на: комментарий от da17

Да, я уже прочитал. Самое простое создать эти 200 сокетов и нити для обработки данных из них поступающих. А отправить - в цикле в этот сокет данные записать. Проще некуда, пишется за скорость набора текста.

turtle_bazon ★★★★★
()
Ответ на: комментарий от DELIRIUM

С этим сложно не согласиться, ведь это действительно так. При этом libev не просто лучше нагрузку держит, а в разы лучше нагрузку держит. Даже, наверное, не ошибусь, если скажу, что на порядок.

turtle_bazon ★★★★★
()
Ответ на: комментарий от da17

На клиенте тоже довольно просто - создаём сокет, при ошибках пытаемся делать бесконечный реконнект. На связь с сервером вообще отдельную сущность, там этот реконнект внутри и инкапсулируется. И две очерди - на отправку и получение. Довольно надёжно.

turtle_bazon ★★★★★
()
Ответ на: комментарий от turtle_bazon

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

anonymous
()
Ответ на: комментарий от anonymous

Знаешь, что я говорил первой линии суппорта, когда работал в суппорте, в таких случаях? Железо - говно. И таки у меня есть опыт работы в хайлоаде, довольно большой, так что не надо тут обвинять меня в некомпетентности.

DELIRIUM ☆☆☆☆☆
()
Ответ на: комментарий от RazrFalcon

Как минимум две очевидные причины:

  • позаботиться о собственной job security;
  • потратить неделю на то, что можно сделать за день. На деньги работодателя, естественно.
eao197 ★★★★★
()
Ответ на: комментарий от DELIRIUM

сегодня в маркете видел девулю, считает себя айтишницей, сидит на кассе товары пробивает, говорит 1С на курсах проходила :-DD
опыт бывает разный, но если в либе из трех файлов не можете разобраться и рассказываете о каких то тормозах
то лучше не советуйте ничего в сетевых разработках

anonymous
()
Ответ на: комментарий от anonymous

Вы мой код видели, чтобы такие утверждения делать? Нет. Вот и не надо безосновательных утверждений. Если есть конструктивная критика, буду рад выслушать, а «ты не осилил» - это не аргумент.

DELIRIUM ☆☆☆☆☆
()
Ответ на: комментарий от DELIRIUM

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

anonymous
()
Ответ на: комментарий от DELIRIUM

под капотом там то что выгодно для ОС, название пулл или селект или кевент не важно
архитектурно это все одинаково

anonymous
()
Ответ на: комментарий от RazrFalcon

Ну да, говорю же, на редисе на баше пишется. Но может, я подумал, у него что-нибудь обрезанное и в zeromq и подобные штуки не умеет.

turtle_bazon ★★★★★
()
Ответ на: комментарий от anonymous

libuv объективно медленнее libev. Ты хочешь это оспорить?

turtle_bazon ★★★★★
()
Ответ на: комментарий от da17

На эрланге это легко делается кстати и сервер соединений есть, но с плюсов на него сложнее переходить чем на го :)

loz ★★★★★
()
Ответ на: комментарий от da17

Ну если линукс, то zeromq или redis - самое то. Очень просто получится.

turtle_bazon ★★★★★
()
Ответ на: комментарий от Deleted

Если это тот самый libev, где после мультиплексирования сокетов все обрабатывается в *одном* потоке, то о какой нагрузке тут может идти речь? Но топикстартеру может и подойти, потому что у него нет нагрузки. Другое дело, что нужно обрабатывать всякие кип-алайвы и переподключения. Это ж городить свой протокол надо. Оно ему надо?

dave ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.