What is the precise difference between client and server side objects?

Hello dear paraview developers!

Could you please clarify the difference between client and server side objects?

I understand that vtk objects and algorithms mostly dwell in the server side, and on the client side there are only proxies. However it is all very confusing and I need clarification


Client side object: An object that lives on the client (aka “ParaView”)
server side objecct: An object that lives on the server (aka “pvserver”)

The subtility is that in “builtin” mode, when using ParaView directly, without a pvserver, the server is actually inside the client (aka “builtin”) and server side object can be accessed easily from the client using GetClientSideObject().

This method can be considered a bit misnomed but in truth, it is even a bit more subtle than that and it comes down to proxies.

When we create a proxy on the client, the server manager layer creates an actual object somewhere, most of the time its on the server, sometimes on the server and client and sometimes only on the client.
eg: ChartViews are always created on the client only.

When you use vtkSMProxy::GetClientSideObject(), you are accessing this client side object whether it has been created or not, this is why this method return nullptr most of the time when using it on a filter in client/server mode.

But, when you are in builtin, client side and server side object are actually the same object, so GetClientSideObject always works in builtin mode.