- Home /
RPC calls are slowing down exponentially...
I posted this in the forum but I thought I might give it a shot here (for time reasons).
So I am trying to send a 60mb file via RPC's. I have effectively broken the file into many byte[] and tested various sizes (4096b, 128kb, 1mb, 100b, etc).
My next step I am sending n many packets at a time over RPC (lets say one 128kb or five 4096b at a time). I then wait for a response from the other parties to claim that they have received the file (via RPC).
After receiving all responses saying that they have successfully received the packet and have began writing to the file I then send my next set of n packets over RPC.
This all works completely fine and flawless on my local machine but when I test across a LAN or Internet there seems to be an exponential growth in time for each packet as time continues. What would be the reason for this. I presume that they are not in fact getting piled up (TCP/reliable style) because I am waiting for a response from the client saying that the data has been successfully received.
There is no need to check if they have received anything. The Unity RPC system takes care of both packet loss and order. So there is no need for that.
Where is the slowdown happening? Is it on the machine, the internet or Unity?
I thought that from the start. I originally didn't check if the user received the packet and it worked fine locally. However when I did anything over LAN or internet it would slow down exponentially as the download continued. So for example the first 10% would go really fast, the next 10% would be okay, the next 10% gets kinda slow and anything after 50% would take all day. It is as if each RPC call is slower than the last. I checked my packets and everything else... they are all fine.
I started waiting for the client to receive the packet because I thought that I was just sending each packet too fast across the network and I was getting into a TCP lock. So I decided get a callback from the client when they have received the packet before sending the next group. I obtained the same results as last time... it worked just fine on my local machine 127.0.0.1 but when I tried over LAN it became exponentially slower as more and more packets were sent.
If you check the stats while running in the editor. Is there a significant difference in the amount of bytes that it says are being set by RPC's to the amount your handing the RPC's? If so, then Unity might be trying to split up the packets even further, which would slow it down.
Again, is Unity being slow, or are the packets just taking longer?
Answer by BeardedManBrent · Jul 07, 2013 at 12:29 AM
Okay... so this was very very strange. I stopped sending a header along with the packets and just sent the raw data divided up into optimal portions. But before sending the file I sent out an RPC that contained all my main header information. By doing this, and possibly something else along the way. My issue is solved. Thanks for your input!
Hi! It was not helped to me. I made RPC call with only one byte massive. Same slowing down. What you made?
[RPC]
void SendContent( byte[] content )
{}
Your answer
Follow this Question
Related Questions
get return on networkView.RPC 1 Answer
Does the position change need state synchronization? 2 Answers
Problem with Playmaker Send Remote Event 1 Answer
Get NetworkPlayer from ViewID 1 Answer
networkView not called on Child objects? 0 Answers