How To Stream Large Files Over TCP In Golang

Sdílet
Vložit
  • čas přidán 6. 06. 2024
  • ► Join my Discord community for FREE education 👉 / discord
    ► Become a Patreon for exclusive tutorials 👉 / anthonygg_
    ► Follow me on Twitter 👉 / anthdm
    ► Follow me on GitHub 👉 github.com/anthdm
    In this Golang tutorial, I will teach you how you can stream large files over a TCP network in Golang.
    #golang

Komentáře • 51

  • @anthonygg_
    @anthonygg_  Před rokem +1

    ► Join my Discord community for free education 👉 discord.com/invite/bDy8t4b3Rz
    ► Become a Patreon for exclusive tutorials👉 www.patreon.com/anthonygg_
    ► Buy me a coffee 👉 donate.stripe.com/aEU2a6ayH2uCa3u4gg
    Thanks for watching

  • @joaomendoncayt
    @joaomendoncayt Před 3 měsíci +9

    "just use little-endian and drink margaritas at the beach"
    "not too big because my pc is pepega"
    these videos are just perfect, perfect pace, perfect content, perfect tone, perfect accent

  • @fredericcordier1519
    @fredericcordier1519 Před rokem +10

    this video is really great and very educational with the different steps/tests. Thanks for your work, the days are too short to watch all your videos :)

  • @ArtemTimofeev-iw5cl
    @ArtemTimofeev-iw5cl Před rokem +15

    man... i cant express how much this will do for my cdn in golang... Dear Anthony, bless you😃

  • @otaxhu8021
    @otaxhu8021 Před 6 měsíci +1

    Your videos are very helpful, no doubt this is the best golang content creator

  • @jatindersinghaujla
    @jatindersinghaujla Před rokem +1

    Before watching this video I just listen what streaming is but today I have seen how actually it works. This streaming concept clear but buffer is and how stream it. Great we are expecting more exciting and interesting videos.

  • @Alibek11221
    @Alibek11221 Před 8 měsíci +1

    Like your work! Thank you! Learned a lot through your videos

  • @bjugdbjk
    @bjugdbjk Před rokem +1

    Awesome , Thnx for the amazing Go content.

  • @Nexjsdeveloper
    @Nexjsdeveloper Před rokem +2

    i need to see ur video over and over! Perfectly fine.

  • @user-fr6gw8xr4b
    @user-fr6gw8xr4b Před 6 dny +1

    Great video. I saw a few problems with the final solution. In the sendFile you append the size of file to the conn. In readLoop you read that size in the loop which is problem. And even if the size is in out of the loop, this will try to copy the entire byte data from the conn into buf in one go.

  • @Andika-hk6rd
    @Andika-hk6rd Před 3 měsíci

    I'm new to programming and I think this is cool, gonna save the video, I think it's useful :)

  • @vaibhavmewada4508
    @vaibhavmewada4508 Před měsícem

    nice video anthony

  • @9scott291
    @9scott291 Před rokem +1

    Thank you for sharing

  • @lowe7372
    @lowe7372 Před 9 měsíci +1

    You are the best!

  • @ruslangabitov5202
    @ruslangabitov5202 Před 3 měsíci

    Thank you for your video.
    How will this transmission work if the sender don't know the file size? Is it possible just send the EOF in the end of transmission? Does conn send EOF when the connection closed?

  • @MaybeAwab
    @MaybeAwab Před rokem +2

    the best

  • @simo_the_goat
    @simo_the_goat Před měsícem

    MR Anthony I really appreciate your content. Please I have a small question I want to know why I opened my activity monitor and my RAM is getting too large even though It's streaming

  • @aianshu
    @aianshu Před 26 dny

    Awesome

  • @oleks19999
    @oleks19999 Před měsícem

    I just don't get one thing, what condition will stop the for loop ? Cause we want to stop it at some point right ?

  • @fullstack_journey
    @fullstack_journey Před 10 měsíci

    Time to build my own OTT platform startup

  • @deNudge
    @deNudge Před rokem +7

    Why are you reading the file size within the for loop?

    • @L0wPressure
      @L0wPressure Před rokem +1

      Yes, it leads to neverending stream of random bytes.
      Get it above the for loop and it will do what's intended.

  • @oscarllamas
    @oscarllamas Před rokem +2

    Great as always

  • @ollegio
    @ollegio Před 23 dny +1

    But your first implementation is also a streaming one: you are not reading whole file into memory, you have a fixed buffer which is updated on each Read.
    I think io.Copy just does the same thing

    • @anthonygg_
      @anthonygg_  Před 23 dny

      I think io copy is bit more effiecient under the hood.

  • @jondoe79
    @jondoe79 Před rokem +3

    Anthony is a Go Master ultimatum

  • @tonycheng1614
    @tonycheng1614 Před rokem +3

    I am very new in go. Can you specify the advantages of streaming file data comparing non-streaming file data in transfer? Thank you sir.

    • @anthonygg_
      @anthonygg_  Před rokem

      Non streaming is saving the complete file in memory. Hence 30 gb files will not work on a simple server

    • @MarinescuEdward
      @MarinescuEdward Před 2 měsíci

      @@anthonygg_ even with the second appraoch if you send 30 gb file it will still allocate 30 gb of memory `binary.Read(con, binary.LittleEndian, &size)` since size is 30 gb

  • @sovrinfo
    @sovrinfo Před rokem +1

    Awesome video. Big thanks.
    I have a question, if I set size: 400000 program exit with code 1.
    Error message:
    recieves 400000 bytes over the network
    2022/12/16 20:50:03 EOF
    Process finished with the exit code 1

    • @anthonygg_
      @anthonygg_  Před rokem

      Could be a read or write timeout. You can configure that

    • @sovrinfo
      @sovrinfo Před rokem

      @@anthonygg_ Thanks

  • @madhudson1
    @madhudson1 Před měsícem

    the for loop on the read with the end solution is a bit redundant i think. Wouldn't this solution just endlessly (for huge files) read into memory anyway? the Buffer will just fill up continuously, instead of allowing you to process x number of bytes?

    • @anthonygg_
      @anthonygg_  Před měsícem +2

      I need to check this, you could be right

  • @wMwPlay
    @wMwPlay Před rokem +2

    Can I download twitch stream and stream it to youtube upload API directly, using this method?

    • @anthonygg_
      @anthonygg_  Před rokem +2

      That will involve some more work my man

  • @headlikeahole6548
    @headlikeahole6548 Před 4 měsíci

    How does the method "binary.Read" know where the size data is and where the file data is?

    • @twitchizle
      @twitchizle Před 3 měsíci

      Server sends, filesize. Binary reads filesize. Server sends filedata. Binary read file data.

  • @adamsribz
    @adamsribz Před 10 měsíci +1

    Would be amazing if you could share github snippets with your videos

    • @anthonygg_
      @anthonygg_  Před 10 měsíci +3

      Im getting paid way to less for that. This is free content made in my free time. Leeched by many. Returned by a few.

    • @adamsribz
      @adamsribz Před 10 měsíci +1

      @@anthonygg_ I feel you! Your hard work shows even in your free stuff.

  • @tanko.reactions176
    @tanko.reactions176 Před 10 měsíci +1

    brother, this is the second time i see you sending stuff over the network without taking into account that the operating system can not always send N-bytes just becuase you wish to send N-bytes.
    it may send N/2.. or much less.
    if you wish to stream, you have to keep track of a pointer to how much has been send.
    if N/2 has been send, then you send from N/2 until N..
    you can not declare the chunk to be sent, if only a piece of it may be sent.
    the issue does not occur locally, it occurs when you do this over the net!

    • @anthonygg_
      @anthonygg_  Před 10 měsíci +2

      What are you talking about my man. Read net.Conn.

    • @dazealex
      @dazealex Před 5 měsíci

      I have no idea what the dude is saying either. RTFM @@tanko.reactions17

  • @ghostbuster5266
    @ghostbuster5266 Před rokem +1

    You need read file size before loop 😅

  • @mjhsaja
    @mjhsaja Před 3 měsíci

    rand.Reader is missing