Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: Java: TCPSend, kuinka tämä olisi optimoituna ?

HannuTapio [13.08.2022 13:33:27]

#

Hei,

Minulla on tässä minun Java koodi, siinä lähetetään, TCP pakettia, palvelinohjelmasta websocket clienttiin javascriptiin.

En ole ihan varma onko tämä "hyvää" koodia, minua on paljon haukuttu koodista, kuinka tuota voisi optimoida hieman, siinä on tarkoitus olla 2 tai 3 threadia, jotka lähettävät tuon kautta pakettia lautapeliohjelmaani.

private boolean TCPSendMessageToSlot ( int lslot , String lstr2 )
    {
        lstr2 += ">";
        int pituus = lstr2.length ();

        if ( g.g_sockets[ lslot ].l_socketti != null )
        {
            synchronized ( g.llock_sendtcp[ lslot ] )
            {

                try
                {
                    if ( pituus < 126 )
                    {
                        this.pituus2[ 0 ] = ( byte ) ( 128 + 2 );
                        this.pituus2[ 1 ] = ( byte ) ( pituus );
                        g.g_sockets[ lslot ].l_output_stream.write ( ( byte[] ) ( this.pituus2 ) );
                    } else if ( pituus < 65536 )
                    {
                        this.pituus4[ 0 ] = ( byte ) ( 128 + 2 );
                        this.pituus4[ 1 ] = ( byte ) ( 126 );
                        this.pituus4[ 2 ] = ( byte ) ( ( pituus >> 8 ) & 0xff );
                        this.pituus4[ 3 ] = ( byte ) ( pituus & 0xff );
                        g.g_sockets[ lslot ].l_output_stream.write ( ( byte[] ) ( this.pituus4 ) );
                    } else
                    {
                        this.pituus10[ 0 ] = ( byte ) ( 128 + 2 );
                        this.pituus10[ 1 ] = ( byte ) ( 127 );
                        this.pituus10[ 2 ] = ( byte ) ( ( ( long ) pituus >> 56 ) & 0x7f );
                        this.pituus10[ 3 ] = ( byte ) ( ( ( long ) pituus >> 48 ) & 0xff );
                        this.pituus10[ 4 ] = ( byte ) ( ( ( long ) pituus >> 40 ) & 0xff );
                        this.pituus10[ 5 ] = ( byte ) ( ( ( long ) pituus >> 32 ) & 0xff );
                        this.pituus10[ 6 ] = ( byte ) ( ( pituus >> 24 ) & 0xff );
                        this.pituus10[ 7 ] = ( byte ) ( ( pituus >> 16 ) & 0xff );
                        this.pituus10[ 8 ] = ( byte ) ( ( pituus >> 8 ) & 0xff );
                        this.pituus10[ 9 ] = ( byte ) ( ( pituus ) & 0xff );
                        g.g_sockets[ lslot ].l_output_stream.write ( ( byte[] ) ( this.pituus10 ) );
                    }
                    g.g_sockets[ lslot ].l_output_stream.write ( ( byte[] ) ( lstr2 ).getBytes ( "UTF-8" ) );
                    xutils.dpl ( "MSG SEND : " + lstr2 );
                } catch ( IOException e )
                {
                    xutils.dpl ( "TCP_Error" );
                    xsynchronized.xextras_syncs_001.shut_down_socketti ( lslot );
                }
            }
        }
        return true;
    }

Tämä on minulle hirmu tärkeä koodi, minulla on idea ainakin 12500 asiakasta palvella palvelinohjelmassani.

Onko tuo huono rakenne vai ihan kelpo koodi pätkä ?

En siis ollut koulutuksia nauttina ohjelmoinnissa, kevyt lukio tausta vaan.

:) :) :)

--

jalski [13.08.2022 15:19:29]

#

Ehkä WebSocket serverin tapauksessa nimi: TCPSendMessageToSlot on vähän harhaan johtava ja vaikka nimi: WSMessageToSlot voisi olla kuvaavampi. Ottamatta nyt kantaa koodin toimivuuteen, niin itse faktoroisin koodia ja lisäisin ainakin funktiot: WSEncode ja WSDecode varsinaisten WebSocket viestien käsittelyä varten.

HannuTapio [13.08.2022 15:35:20]

#

WSMessageToSlot,

Minulla on siis Java ohjelma kyseessä tässä, minulla on TCP ServerSocket käytössä, tämä Java palvelinohjelma käyttää TCP ja sitten nginx lähettää ne websockettina javascript lautapeliohjelmaani.

En osaa käyttää WebSocket käskyjä, mitä Javassa taitaa nykyään olla.

Minulla on erikseensä, encode ja decode, mutta, olen jo poistana ne tästä java palvelinohjelmastani, mutta, voin laittaa sen takaisin, minulla oli oma salaus 8 byten xor aiemmin, voin laittaa vielä ohjelmien konnektiin, toisen vaikka 4 byten xorin, eli olisi ihan lautapeliohjelman konnektin aikana 4 byten xor käyttöön, ja sitten jokaiseen pakettiin vielä vaikka 8 byten xor, nämä yhdessä on aika kova, mutta, ei varmaankaan tarvittavaa.

try
{
     server = new ServerSocket ( 43100 , 222 );
     server.setSoTimeout ( 0 );
     server.setReceiveBufferSize ( 1111111 );
     xutils.dpl ( "SetReceiveBufferSize : " + server.getReceiveBufferSize () );
} catch ( IOException e )
{
     xutils.dpl ( "Error socket : " );
}

:) :) :)

--

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta