Jump to content

Wilton Ergon

uniGUI Subscriber
  • Posts

    626
  • Joined

  • Last visited

  • Days Won

    21

Posts posted by Wilton Ergon

  1. 4 minutes ago, Farshad Mohajeri said:

    Se você deseja evitar que o servidor mestre crie nós locais, apenas defina seu max_nodes = 0.

    no, I need the master server to create sessions too

    I will limit a maximum of 10 us
    and the other servers I'll leave with 20

    because the master server has a good configuration, 24 colors 128 ram

    in the initial tests, I'm trying to get at least the other servers working.
    then I activate the master server to also start sessions

  2. I'm setting up a test address and managed to get access to 2 servers to work, but sometimes it displays an error stating that the executable file was not informed in the cgf file, this happens randomly

    serv-bd (master)

    gepweb_e.exe  -> binary my app compiled version 1552

    gepweb_d.dll -> dll hyperserver  - version 1552

    site configured in IIS

    in my gepweb_d.cfg  

    [http_transport]
    start_port=42200

    [server-0]
    enabled=1
    url=http://10.0.3.106:8077
    name=SERV-APP1
    token=saktid21092908074XXX

    [server-1]
    enabled=1
    url=http://10.0.4.13:8077
    name=SERV-APP2
    token=ffsigc21092908424XXXX


    [hyper_server]
    binary_name=GEPWEB_E.EXE
    initial_nodes=2
    max_nodes=5
    max_sessions=0
    sessions_per_nodes=0
    prompt_login=1
    persistent_node_zero=0
    port=8077
    url_path=
    url_referer=
    ext_root=[ext]\
    uni_mobile_root=[unim]\
    uni_root=[uni]\
    uni_packages_root=[unipack]\
    max_requests=500
    detailed_log=0
    server_title=serv-bd
    antiflood_per_ip=0
    server_root=
    framework_files_root=
    session_one_per_ip=0
    server_build=1.90.0.1552
    dont_create_backup=0
    allow_remote_config=1

    -------------------------------

     


    in serv-app1

    GEPWEB_D.CFG 
    content:
    [transport]
    pool_size=0
    command_timeout=20000
    request_timeout=300000
    connect_timeout=20000


    [http_transport]
    start_port=43000

    [hyper_server]
    binary_name=GEPWEB_E.EXE
    initial_nodes=2
    max_nodes=4
    max_sessions=0
    sessions_per_nodes=0
    prompt_login=1
    persistent_node_zero=0
    port=8077
    url_path=
    url_referer=
    ext_root=[ext]\
    uni_mobile_root=[unim]\
    uni_root=[uni]\
    uni_packages_root=[unipack]\
    max_requests=500
    detailed_log=0
    server_title=SERV-APP1
    antiflood_per_ip=0
    server_root=
    framework_files_root=
    session_one_per_ip=0
    server_build=1.90.0.1552
    http_max_pool=1000
    max_connections=1000
    dont_create_backup=0
    allow_remote_config=1


    GEPWEB_E.EXE -> exe may aplication compiled with version 1552
    hyper_service.exe -> service hs

    hyper_service.cfg -> cfg
    content:
    [transport]
    pool_size=0
    command_timeout=20000
    request_timeout=300000
    connect_timeout=20000

    [http_transport]
    start_port=45000

    [hyper_server]
    binary_name=GEPWEB_E.EXE
    initial_nodes=2
    max_nodes=4
    max_sessions=0
    sessions_per_nodes=0
    prompt_login=1
    persistent_node_zero=0
    detailed_log=0
    port=8077
    url_path=
    url_referer=
    ext_root=[ext]\
    uni_mobile_root=[unim]\
    uni_root=[uni]\
    server_root=
    framework_files_root=
    uni_packages_root=[unipack]\
    max_requests=1000
    http_max_pool=1000
    max_connections=1000
    antiflood_per_ip=0
    session_one_per_ip=0
    server_title=SERV-APP1
    server_build=1.90.0.1552
    dont_create_backup=0
    allow_remote_config=1
    token=saktid21092908074XXX  ->copied and past to server master

    install hs in prompt
    hyper_service /install gep_teste 

     

     

    image.png.dfcb7b73fce2cbfb8e73700268a6d6f1.png

     

    image.thumb.png.db19ee186af4e3d1e2b06f8869cc399e.png

     

    image.thumb.png.2809804938d8ef91a71477d8eadbe416.png

    I put this label on the login screen to know which server the system was loaded on, and it's correctly redirecting the system to the servers.

     

     

    image.png.f42df177fba488afaf7227f797944b7a.png

     

     

     

  3. it's not that simple, due to unigui's architecture, requests must always be forwarded to the same server, otherwise, the session would be lost.
    It's very simple to create a balancer with nginx windows version for a rest api, because each request can be forwarded to a different server, we don't have to worry about sessions, because they don't exist.

    I now use nginx linux version, as only this version has the ability to send requests based on the source ip, thus keeping sessions open from a unigui application

    this generates a non-uniform balance, as it always ends up forwarding a user to the same server.

    unigui's native balancer will solve this, because every time the user connects, he will be forwarded to a server with fewer users, not to mention that we will not depend on external solutions for this.

  4. we know the complexity of this new version, there are many details to be seen, there is the documentation, examples, and even the adjustment for version 11 of delphi, everything goes well, because we trust in your work.

  5. you must have a parameter in your application that indicates the time zone difference in relation to the server time, based on this difference, in every data inclusion for date fields you will have to add the current time (server) with this parameter, which can be negative or positive, and very likely that you will have to review all your forms, and where it is necessary to update dates..

    another way would be through triggers in your database, which would make this adjustment automatically on inclusion or change.

     

    you could create a generic function in delphi that fetches the date time and adds it to that parameter, and use this function in all fields that need to write date, or date + time

     

    if the situation exists that your china customer traveled to the US, in this scenario, would your system have to adopt local time, or china time? if it's local time, then in that case you should use the javascript function that will capture the browser's local time...

    • Thanks 1
  6. in mainform, script paste this

     

    var IDLE_TIMEOUT = 600; //10 min
    var _idleSecondsCounter = 0;
    document.onclick = function() {
        _idleSecondsCounter = 0;
    };
    document.onmousemove = function() {
        _idleSecondsCounter = 0;
    };
    document.onkeypress = function() {
        _idleSecondsCounter = 0;
    };
    window.setInterval(CheckIdleTime, 5000); // 5 seconds

    function CheckIdleTime() {
        _idleSecondsCounter++;
        var oPanel = document.getElementById("SecondsUntilExpire");
        if (oPanel)
            oPanel.innerHTML = (IDLE_TIMEOUT - _idleSecondsCounter) + "";
        if (_idleSecondsCounter >= IDLE_TIMEOUT) {
            ajaxRequest(FrmPrincipal.form, '_idle_timeout', []);
        }
    }

     

     

    in mainform events, onAjaxEvent

      if EventName = '_idle_timeout' then
        begin
          uniGUIApplication.UniSession.Terminate('you message');
        end;

     


    this timer is running on the client side, without access to the server, and crashes the application after 600 seconds of no activity.
    you can change this by changing the value of the variable
    IDLE_TIMEOUT


    if you want to do the same before logging in, you must do the same on the login screen

  7. the load division is calculated according to the maximum number of nodes that each server will go up, if this is proportional to the total nodes of all servers, this would be the calculation that each server would have to have active sessions, such as a stress test, I imagine that all sessions were loaded once and were active.
    let us know the logic used for dividing this workload.

     

    and the way I did in this little spreadsheet?

    image.png.12e5319f97dcbf8879d521f0c89c5c9b.png

  8. 23 hours ago, Farshad Mohajeri said:

    image.png

    Um cluster com 5 servidores sob teste de estresse!

     

     

    I realized that the number of sessions are not with close amounts, that and why was defined a different weight for each server?
    in the example of 5 servers
    could have for example
    1 receiving 10% of the load, and the others receiving 22.5%, we don't know if something in this sense was thought, but it would be good to define the weight that each server can receive.

  9. this is great, however, I have had cases where the application server was operating, but it was not connecting to the database server,
    the hyperserver in this situation will open the application, but it in turn will not communicate with the bank, so the need to stop access to this server manually, this occurs, because my balancer is on another machine other than the bank server .

  10. @Farshad Mohajeri

    on the hyperserver, will it be possible to remove one of the servers from the balance without having to stop all the others?, sometimes one of the servers has problems, or needs maintenance, and we need to remove it from the balance, but it would be good to do that, without have to take down the other servers.

  11. 2 hours ago, Stemon63 said:

    Oi Wilton,
    Tenho um aplicativo UNIGUI em execução que funciona muito bem. Com Mariadb ou Firebird como backend, (outro em andamento com PostgreSQL).
    Sem problemas por anos, e UNIGUI é meu primeiro "santo no céu".
    Esses são aplicativos da web que estão em nuvens, com no máximo 100-120 sessões simultâneas para cada um.
    Só porque gosto, pretendo reescrever aplicativos mais importantes e complexos que são para um grande número de usuários, aplicativos que agora estão em Delphi VCL com Devexpress e que são servidos através de Remote Desktop. Nesse caso, o gerenciamento do número de usuários e recursos de largura de banda passa a ser estratégico.
    Não devemos esquecer que para cada sessão de gerenciamento das operações é aberto um número consistente de tabelas (e não esqueçamos que uma das vantagens do Unigui é o gerenciamento das grades, caso contrário torna-se difícil recriar a abordagem do desktop).
    Uma abordagem mais orientada para o cliente nos permitiria alimentar o armazenamento local e fechar a conexão e os conjuntos de dados, adiando as reconexões em caso de atualização, assim como a atualização em cache com o ApplyUpdate, com considerável economia de recursos e comunicação contínua com o servidor . porque a maioria das operações são feitas entretanto no cliente.

    Em relação à segurança de dados, sei muito bem que uma abordagem diferente (como o núcleo Tmsweb ou outras ferramentas em javascript) obriga a enviar dados e estruturas em Json para o cliente, também expondo o endereço dos recursos, mas essa é a abordagem que geralmente usam todos os produtos da web orientados para o cliente que usam, por exemplo, serviços de descanso. Presumi evitar a abordagem SQL no cliente e usar os serviços Rest (embora eu prefira Json-rpc), modificando claramente a arquitetura com muito mais trabalho, o que possivelmente gostaria de evitar 🙂
    A força do Unigui é ocultar todos os gerenciamento de dados no servidor, e "mascarar" com apelidos todos os dados enviados ao cliente.
    Eu conheço essa vantagem muito bem 🙂

    I use this feature of the SDAC component, which keeps the connection closed, this considerably reduces the number of active connections in the sql server database, together, pooling is also used to keep the cache of these connections, the only problem is that you cannot use sql temporary tables in your application.

    this does not reduce the back and forth from the client to the server, nor the use of memory, as the query data will be in the application server's memory, and the connection with the database is closed, right after opening.

    in the case of transactions, it will remain open until the data is committed.

    image.thumb.png.7269f2765a2779a144ea24e3babd6cab.png

  12. 11 hours ago, Stemon63 said:

    Hoje, esses servidores são usados para aplicativos de desktop remoto (DELPHI). O mesmo que ESPERO transformar com a UNIGUI nos próximos meses.
    Os servidores têm 64 GB de RAM e 2 foreach de processador (6-8 núcleos).
    Agora o balanceamento é feito pelo próprio software Remote Desktop. ESPERO usar novos recursos do HyperServer com UNIGUI.

    Por isso preciso de DBgrids e datasets de clientes mais otimizados, para evitar "bate-papos" contínuos em grades de rolagem com servidor, isso não é problema com poucas sessões, mas o jogo muda se eu tiver milhares.
    Nossos concorrentes possuem soluções web puras com infra-estrutura centrada no cliente e serviços de descanso com milhares de conexões e poucos recursos, solução mais próxima do núcleo web da Tms; Mas eu gosto e preciso do poder do UNIGUI, comunicações "relâmpago" e evitando conversas contínuas quando não são necessárias.
    Tenho certeza de que Farshad tratará do assunto. Unigui ROCKS.

     

    I mean that you have known unigui for at least 10 years (when you entered the forum) but you still don't have anything running using unigui?

  13. this is a restriction of the report builder, the generated pdf creates a url that does not open the link and a new page.
    if you open the pdf in any other editor the same thing will happen.

    for this specific case, I suggest you generate a report in pure html, so you will have more control

    you assemble the html, throw it into a tuniHTMLMemo

    for print.

      UniSession.AddJs(edHtml.jsname+'.iframeEl.dom.contentWindow.print();');

     

    I use the report builder a lot, and for some cases I had to do it that way...

×
×
  • Create New...