Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Кто как юзает сокеты или сетевые библиотеки? / 25 сообщений из 81, страница 1 из 4
21.05.2018, 14:28
    #39647586
SOFT FOR YOU
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто как юзает сокеты или сетевые библиотеки?
Всем привет

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

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

Соответственно, хочется спросить у местных, кто как решает те или иные вопросы межкомпьютерного взаимодействия. Описания, куски кода и примеры модулей - приветствуются.
...
Рейтинг: 0 / 0
21.05.2018, 14:35
    #39647590
defecator
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто как юзает сокеты или сетевые библиотеки?
SOFT FOR YOUИсходников с прошлых работ нет - подсмотреть не могу.




SOFT FOR YOUкто как решает те или иные вопросы межкомпьютерного взаимодействия. Описания, куски кода и примеры модулей - приветствуются.

Много лет использую RealThinClient - полёт круче некуда.
Сотни сессий, keep-alive встроенный, RPC, компрессия, шифрование и много всего другого
...
Рейтинг: 0 / 0
21.05.2018, 14:48
    #39647602
gamers
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто как юзает сокеты или сетевые библиотеки?
defecator,

а эта RealThinClient штуковина, подойдёт для реализации сервера для игры ? Мол, запускаем клиенты, открываем порты через хамач у многих пользователей. Шлём данные ей, и она быстро обарабатывает и отсылает всем ответы, расположения предметов - игроков, и так далее ?

Или она больше по другой части
...
Рейтинг: 0 / 0
21.05.2018, 15:01
    #39647611
alekcvp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто как юзает сокеты или сетевые библиотеки?
defecatorМного лет использую RealThinClient - полёт круче некуда.
Сотни сессий, keep-alive встроенный, RPC, компрессия, шифрование и много всего другого
Хотел посмотреть, а его сайт теперь - роскомнадзорклиент :(
Он платный?
...
Рейтинг: 0 / 0
21.05.2018, 15:31
    #39647619
SOFT FOR YOU
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто как юзает сокеты или сетевые библиотеки?
defecator,

Скинь ссыль на бесплатную реализацию
Оно кстати кроссплатформенное?

P.S. слышал ещё про ZMQ. Но там слишком много исходников для меня, особенно на нелюбимом С++ )
...
Рейтинг: 0 / 0
21.05.2018, 15:31
    #39647620
gamers
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто как юзает сокеты или сетевые библиотеки?
...
Рейтинг: 0 / 0
21.05.2018, 15:42
    #39647632
GunSmoker
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто как юзает сокеты или сетевые библиотеки?
alekcvpХотел посмотреть, а его сайт теперь - роскомнадзорклиент

AirVPN - рекомендую. Можно поставить прям на роутер.
...
Рейтинг: 0 / 0
21.05.2018, 19:21
    #39647732
alekcvp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто как юзает сокеты или сетевые библиотеки?
gamers,

Спасибо!
...
Рейтинг: 0 / 0
22.05.2018, 05:20
    #39647831
Дегтярев Евгений
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто как юзает сокеты или сетевые библиотеки?
а grpc в экосистеме delphi нема?
...
Рейтинг: 0 / 0
25.05.2018, 09:54
    #39649702
vavan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто как юзает сокеты или сетевые библиотеки?
когда я уперся в некоторые ограничения dcom то чтобы минимизировать переделки решил перетаскивать мидас-приложения на родной же tsocketconnection. для начала пришлось его просто править, потом дополнительно своих мулек наворотил. в результате клиенты/апсервера фактически совершенно не пришлось переделывать, только сменить транспорт и добавить обработчиков для новых фич
...
Рейтинг: 0 / 0
25.05.2018, 16:17
    #39650013
makhaon
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто как юзает сокеты или сетевые библиотеки?
делал двунаправленное общение сервис <> гуй, на портах. общается с помощью TIdCmdTCPClient/TIdCmdTCPServer, больше 70ти команд в обе стороны обрабатывается, работает без проблем. После прихода унигуя всё это 'богатство' списано за не надобностью. Был бы он раньше, то даже не возился бы.
...
Рейтинг: 0 / 0
25.05.2018, 18:23
    #39650097
SOFT FOR YOU
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто как юзает сокеты или сетевые библиотеки?
Говорят, Indy зло. Там каждое соединение в отдельном потоке
...
Рейтинг: 0 / 0
25.05.2018, 18:55
    #39650110
Дегтярев Евгений
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто как юзает сокеты или сетевые библиотеки?
SOFT FOR YOUГоворят, Indy зло. Там каждое соединение в отдельном потоке
это, конечно, зло. используй libuv, позволяет в одном потоке обрабатывать много соединений.
...
Рейтинг: 0 / 0
25.05.2018, 20:53
    #39650149
SOFT FOR YOU
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто как юзает сокеты или сетевые библиотеки?
Дегтярев Евгений,

А чем он лучше RTC ?
...
Рейтинг: 0 / 0
25.05.2018, 21:53
    #39650158
alekcvp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто как юзает сокеты или сетевые библиотеки?
Дегтярев ЕвгенийSOFT FOR YOUГоворят, Indy зло. Там каждое соединение в отдельном потоке
это, конечно, зло. используй libuv, позволяет в одном потоке обрабатывать много соединений.
Что-то Delphi-порт зело старый...
...
Рейтинг: 0 / 0
25.05.2018, 22:45
    #39650168
makhaon
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто как юзает сокеты или сетевые библиотеки?
Дегтярев Евгений,

для своих применений хватает. гигабитную сеть забивает полностью.
...
Рейтинг: 0 / 0
26.05.2018, 15:23
    #39650358
Дегтярев Евгений
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто как юзает сокеты или сетевые библиотеки?
makhaonдля своих применений хватает. гигабитную сеть забивает полностью.
как я понял проблема не в том что забьет не забьет, а в потоках
...
Рейтинг: 0 / 0
26.05.2018, 15:50
    #39650363
SOFT FOR YOU
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто как юзает сокеты или сетевые библиотеки?
Объясните мне схему убслуживания соединений

Правильно ли я понимаю, что есть один поток, который вычитывает данные из сокета, читает и опционально распаривает данные, потом кладёт их в какую-то очередь. А там уже работает пул потоков, которые обрабатывают полученные буферы данных.

И по исходящим пакетам тоже не понятно. За исходящие отвечает тот же поток, или создают другой?

Ну короче проясните ситуацию ). Желательно с кодом.
...
Рейтинг: 0 / 0
26.05.2018, 16:43
    #39650375
MaratIsk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто как юзает сокеты или сетевые библиотеки?
SOFT FOR YOU,

у меня synopse
устроено так

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
  TTCPDaemon = class(TThread)
  private
    fSock   : TTCPBlockSocket;
    fPort   : string;
  public
    property Port: string read fPort write fPort;
    constructor Create (APort: string);
    destructor Destroy; override;
    procedure Execute; override;
  end; 

  TSQLDaemon = class(TThread)
  private
    fClient  : string;
    fSock    : TTCPBlockSocket;
    fTimeOut : integer;
    fDBConn  : TDBConnection;
  public
    property TimeOut: integer read fTimeOut write fTimeOut;
    procedure Stop;
    procedure SendData(AStatus: Integer; AStream: TMemoryStream);
    procedure SendStream(AStream: TMemoryStream);
    procedure SendString(AValue: PChar);
    constructor Create (HSock: TSocket; Client: string);
    destructor Destroy; override;
    procedure Execute; override;
  end;      

rocedure TTCPDaemon.Execute;
var
  s : string;
  sIP : string;
  ClientSock : TSocket;
begin
  try
    fSock.CreateSocket;
    fSock.SetLinger(True, 1);
    fSock.Bind('0.0.0.0', fPort);
    fSock.Listen;
    if fSock.LastError <> 0 then begin
      s := 'Код ошибки ' + IntToStr(fSock.LastError) + #13#10 + fSock.LastErrorDesc;
      raise Exception.Create(s);
    end; // if fSock.LastError <> 0
    repeat
      if Terminated then Break;
      if fSock.CanRead(1000) then begin
        ClientSock := fSock.Accept;
        if fSock.LastError <> 0 then begin
          s := 'Socket LastError ' + IntToStr(fSock.LastError) + #13#10 + fSock.LastErrorDesc;
          raise Exception.Create(s);
        end; // if fSock.LastError <> 0
        sIP := fSock.GetRemoteSinIP + ':' + IntToStr(fSock.GetRemoteSinPort);
        //ClientAdd(sIP);
        TSQLDaemon.Create(ClientSock, sIP);
      end; // if CanRead(1000)
      Sleep(1);
    until False;
  except
    on E:Exception do begin
      s := E.Message;
      SaveToLog(s);
    end;
  end;
end;                    


...
Рейтинг: 0 / 0
26.05.2018, 17:19
    #39650382
makhaon
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто как юзает сокеты или сетевые библиотеки?
SOFT FOR YOU,

У меня подобный код, немного с другой обвязкой.

авторПравильно ли я понимаю, что есть один поток, который вычитывает данные из сокета, читает и опционально распаривает данные, потом кладёт их в какую-то очередь. А там уже работает пул потоков, которые обрабатывают полученные буферы данных.


Есть один поток, который ожидает входящее соединение. Если соединение пришло - создаётся новый поток на это соединение и в пределах его обрабатывается весь коннект.

авторИ по исходящим пакетам тоже не понятно. За исходящие отвечает тот же поток, или создают другой?

TCP соединения двунаправленные, если это имеется в виду.
...
Рейтинг: 0 / 0
26.05.2018, 18:31
    #39650396
SOFT FOR YOU
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто как юзает сокеты или сетевые библиотеки?
MaratIsk,

За код спасибо
По существу не понятно, причём здесь сессии, соединения и потоки )

makhaon,

Подход как в Indy. Не подходит для большого количества соединений
...
Рейтинг: 0 / 0
26.05.2018, 18:38
    #39650399
MaratIsk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто как юзает сокеты или сетевые библиотеки?
SOFT FOR YOU,

какие сессии, соединения ?!
...
Рейтинг: 0 / 0
26.05.2018, 19:09
    #39650408
SOFT FOR YOU
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто как юзает сокеты или сетевые библиотеки?
MaratIsk,

Которых у тебя нет :)

В моем понимании есть клиентское приложение, которое устанавливает соединение с твоим сервером, по сему поводу открывается сессия и сопровождается какое-то время
...
Рейтинг: 0 / 0
26.05.2018, 19:20
    #39650413
MaratIsk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто как юзает сокеты или сетевые библиотеки?
SOFT FOR YOU,

сессия соединения в этой строчке
TSQLDaemon.Create(ClientSock, sIP);

дальше она сама обрабатывает запросы клиента
...
Рейтинг: 0 / 0
26.05.2018, 19:25
    #39650417
MaratIsk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто как юзает сокеты или сетевые библиотеки?
SOFT FOR YOU,

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
procedure TSQLDaemon.Execute;
var
  s : string;
  i : integer;
begin
  repeat
    try
      if fSock.CanRead(fTimeOut) then begin
        s := fSock.RecvString(fTimeOut);
        if (fSock.LastError = 10054) or
           (fSock.LastError = 10060) then Break;
        if s <> '' then begin
            fDBConn.DataIn.Clear;
            fDBConn.DataOut.Clear;
            fSock.RecvStream(fDBConn.DataIn, fTimeOut);
            fDBConn.DoCommand;
            s := '';
        end; // if s <> ''
      end;
      Sleep(1);
    except
      on E:Exception do begin
        s := E.Message;
        SaveToLog(s);
      end;
    end;
  until Terminated;
  try
    if fDBConn.Connected then fDBConn.Disconnect;
    //ClientDelete(fClient);
  except
    on E:Exception do begin
     s := E.Message;
     SaveToLog(s);
    end;
  end;
end;                          
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Кто как юзает сокеты или сетевые библиотеки? / 25 сообщений из 81, страница 1 из 4
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]