One other note, if you have a request / response type protocol with fairly 
defined lengths, you don’t need a buffer larger than the largest message if you 
don’t allow concurrent requests from the same client. 

> On Dec 31, 2019, at 9:35 AM, Robert Engels <reng...@ix.netcom.com> wrote:
> 
> 
> The important factors: 1) the larger the buffer the fewer system calls that 
> need to be made 2) the larger the buffer the more memory use which can be 
> significant with many simultaneous connections
> 
> You need to remember that with correct socket options the kernel is already 
> buffering, and adding your own buffering on top may not be needed 3) really 
> large user space (Go) buffers may be needed if processing a really fast fat 
> pipe
> 
>>> On Dec 31, 2019, at 9:23 AM, Ron Wahler <ron.wah...@gmail.com> wrote:
>>> 
>> 
>> Thanks for all the great responses.
>> 
>> How much of the read behavior is in the golang underlying code on the read 
>> and how much is 
>> on the underlying OS driver that implements the behavior of the read. I 
>> understand the stream nature of the TCP connection and I handle that in my 
>> code, I was just looking to optimize the buffer allocation for the read on 
>> each packet  of the stream so I don't have to over allocate the buf if I 
>> scaled out my function to be concurrent. From the responses so far I think I 
>> just have to pick a buffer size for the Read() or the ReadAtLeast() and just 
>> process multiple buffers with my pre-allocated guess on the buffer size as I 
>> am already doing.
>> 
>> I was also looking to understand the read implementation of GoLand and how 
>> it utilizes the underlying drivers, so any info on that or where to read the 
>> code for golang integration with the drivers would be great.
>> 
>> cheers,
>> Ron
>> 
>>> On Friday, December 27, 2019 at 5:11:42 PM UTC-7, Ron Wahler wrote:
>>> I am looking for a net.conn standard read that would return a data buffer 
>>> the exact size of the read. I am trying to read an unknown amount of byte 
>>> data from the connection. With the read i am using I am required to 
>>> pre-allocate a buffer and pass that buffer to the read. I am looking for a 
>>> read that works more like  the ReadString , but is for a byte slice.
>>> 
>>> // I want something similar to this read that returns the read string into 
>>> the message string.
>>>  message, err := bufio.NewReader(ServerConn).ReadString('\n')
>>> 
>>>                 if ( err != nil ){
>>> 
>>>                         fmt.Println("RELAY: ERROR:  Reg Message read err:", 
>>> err)
>>> 
>>>                         return 
>>> 
>>>                 }
>>> 
>>> 
>>> 
>>> 
>>> 
>>> // had to preallocate a buffer, but I want a read to return me a buffer so 
>>> I don't have to guess how big to make it.
>>> 
>>>  buf := make([]byte, 1024*32)
>>> 
>>>  // READ FROM CLIENT
>>> 
>>>  nBytes, err := Csrc.Read(buf)
>>> 
>>> 
>>> 
>>> 
>>> 
>>> Is this not possible, I have not seen any examples that would indicate that 
>>> there is a standard library that would do something like what I am looking 
>>> for.
>>> 
>>> 
>>> 
>>> thanks,
>>> 
>>> Ron
>>> 
>> 
>> -- 
>> You received this message because you are subscribed to the Google Groups 
>> "golang-nuts" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to golang-nuts+unsubscr...@googlegroups.com.
>> To view this discussion on the web visit 
>> https://groups.google.com/d/msgid/golang-nuts/0e735f0e-dfb1-4e1f-9a2c-1b153be20514%40googlegroups.com.

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/golang-nuts/DA1AEA55-8C9D-4E19-860E-A6FBA417406A%40ix.netcom.com.

Reply via email to