RPC v. OnSerializeNetworkView

So I’ve been working on a multiplayer game for the iPhone, and it requires very fast response time, and I’m not getting it with my current architecture, so I thought I’d ask for help. The game involves a bunch of dual stick shooter characters running around in a small level (up to 4), and my current system is to have one ‘Master’ object that watches that game’s player and joysticks and buttons sends out RPCs whenever a value changes. In this way I sync the position and automatically get movement prediction and animation by also syncing the controller values to the script of the object representing that player on the other iPhone. Sounds like it would work nicely, with minimal bandwidth. The problem I’m running into is that it seems the iPhone, while sending RPCs just fine, doesn’t receive them at a high update rate. If I run a copy of the game in Unity as a server, and connect to it from a phone, I get perfect updating on the computer copy of what the iPhone is doing (therefore RPCs are being sent just fine). The trouble is the phone doesn’t take the updates from the computer quickly enough to get precise movement. So here’s the kicker: Is this a problem with RPCs? I’m using Unity 3.0, and I guess I had assumed they would fix RPC bugs, but would it be beneficial to rework the system to do OnSerializeNetworkView? And if I did that, any suggestions on how to only update values when things change? I have far too many floats that need to be passed for them to all stream at once and stream smoothly. So, thoughts?

Basically, are RPCs slower than OnSerializeNetworkView for doing updates every frame?

no but:

RPCs are always guaranteed to be sent
RPCs don’t respect SetScope (but you can define specific target)
RPCs allow you to use flexible amount and length of data, bitstreams for serialize network view must have a constant length
RPCs don’t require multiple network views per user and at worst object to fullfill their job. You can have a single network view per player for the communication

So I’ve implemented both systems, and just incase someone else runs into this question again, it turns out OnSerializeNetworkView is noticeably quicker for updating every update cycle on the iDevices.

Is that quicker as in cpu used or data sent? I’m on desktop so it doesn’t matter so much

thats likely because it is not needfully guaranteed to send (normally not an option on idevice at least unless you disallow 3G), through still good to know

Also its more limited on what you can do with it, including the fact that the bitstreams you use must have fixed length, so for chat and alike you can’t get around RPC