Update: UltraVNC 1.4.3.6 and UltraVNC SC 1.4.3.6: https://forum.uvnc.com/viewtopic.php?t=37885
Important: Please update to latest version before to create a reply, a topic or an issue: https://forum.uvnc.com/viewtopic.php?t=37864

Join us on social networks and share our announcements:
- Website: https://uvnc.com/
- GitHub: https://github.com/ultravnc
- Mastodon: https://mastodon.social/@ultravnc
- Facebook: https://www.facebook.com/ultravnc1
- X/Twitter: https://x.com/ultravnc1
- Reddit community: https://www.reddit.com/r/ultravnc
- OpenHub: https://openhub.net/p/ultravnc

Using Repeater to do Load Balancing ?

Post Reply
Shawn_Shadfar

Using Repeater to do Load Balancing ?

Post by Shawn_Shadfar »

Hi:

Could I use the Repeater as a 'Load Balancer'?

Example:

Have 3 different Repeater Nodes connecting to the Server.

Then Each Repeater Node supporting, say 10 Different clients.

As opposed to 1 Server Supporting 30 (3x10) Clients.

Would this work?

Thanks,
Shawn
ipsec
Former moderator
Former moderator
Posts: 565
Joined: 2004-09-20 18:56
Contact:

Post by ipsec »

sountds interesting.

If you could give out three different ports for different groups then yes. Then you just forward each individual port (3 of them) to the different servers. This in turn would do the load balancing by group.

Auto load Balance would have to be something you create ... maybe an app that will redirect them to the server of your choice -

UserA connect - Server APP / Load Balancing server redirects user to server X - Server X is the repeater that allows connections.

UserB Connect - Server APP / Load Balancing server redirect user to server XY - Server XY is the repeater that allows connection.

And so on and so forth.. But it would require that something redirect a user to a repeater server based upon the amount of people connected / connections initiated. That obviously wouldnt load balance but be the best way to not set up groups.. It also requires you to create an application that can tell what the last person connected went to and to send those requests to the repeater server..

since im not a coder.. I have no idea if this is possible.. but I always hear with enough money.. anything is possible.. that or time... not sure which one is more effective.
rmoller
40
40
Posts: 93
Joined: 2004-08-20 09:32

Post by rmoller »

Well this would work, but there would be no performance gain and no obvious gains in "server uptime". The repeater does not "fan out" connections in a way that decreases the load on the server.
rmoller
40
40
Posts: 93
Joined: 2004-08-20 09:32

Post by rmoller »

- sorry, continuing the previous msg....

The server will have exactly the same work, whether it serves thirty individual viewers directly, or it serves three repeaters, each having ten independent sessions. As Rudi stated, the repeater is dumb and serves only the purpose of "making ends meet" TCP-wise.

I often thought of a multicast VNC for classroom purposes (one already exists, google for multicast vnc) but simpler in concept:

A "master" viewer is the only client for a server. All viewers are required to be able to show the same resolution as the "master" viewer. The other viewers connect to the master viewer by normal TCP, not multicast UDP. The master viewer blindly records its own initial handshaking and replays it blindly to each connecting viewer. To handle late newcomers or reconnecting viewers, the master viewer injects "Refresh the whole screen" RFB messages now and then.
rmoller
40
40
Posts: 93
Joined: 2004-08-20 09:32

Post by rmoller »

Continued again....

There would be no gain in total TCP traffic , but the server would save a lot of CPU serving only one session. The master viewer would discard all input from the other viewers and duplicate the RFB messages from the server to all viewers.

I suppose it can be done, so that it is independent of VNC flavour, as long as all viewers are compatible with the master viewer.

Real Multicast would save bandwidth, but would also require some kind of reliable delivery mechanism / feedback from each viewer.
Shawn_Shadfar

The answer if VNC Reflector

Post by Shawn_Shadfar »

Thanks for your answers.

I actually managed to do this by using the "VNC Reflector" (google for vnc reflector).

This does exactly what I needed. One Reflector, say R1 becomes a client to the master Server, then acts as a server to 12 clients.

I created an algorithm to do a very smooth Load Balancing. Every new client (end-user) is automatically assigned to a Reflector (R0, R1, R2 ...). It even automatically activates and decativates Refelectors when needed.

I could give you my Perl code if you wanted.

I've had problems making the Repeater work. So you are saying that the Repeater does not act the same huh?

Shawn
rmoller
40
40
Posts: 93
Joined: 2004-08-20 09:32

Post by rmoller »

Hi,

Sounds interesting...

I looked briefly at VNC reflector a long time ago, but it seemed not so straightforward to use it under Windows at the time... now I noticed there is a Cygwin port available.

IIRC the VNC reflector rebuilds a copy of the framebuffer of the server on the reflector, and then serves that copy to a number of clients.

Please tell me if you can:

- Isn't true that the VNC reflector serves independent sessions to each client, i.e. offloading CPU and memory from the server, but not really "saving" CPU?

- Isn't it true that the VNC reflector is tied to one specific version of the RFB protocol?

greetings

Rasmus
Shawn_Shadfar

Reflector

Post by Shawn_Shadfar »

Rasmus:

I ran 26 direct clients to the VNC Server installed on a very powerful machine. Althout CPU usage was at 3%, the server was drowning big time.

With the Reflector, I created R0 and R1 connected to the Server and had 13 clients connected to the Reflector. And everything looked so much better.

So I would say that total CPU of the machine might be affected the same but it definitely relieves the Handling of the VNC Server. apparently the latter cannot handle more than 25-30 clients properly. It is not a question of machine CPU.

I am using the Reflector on Windows. About the RFB Protocol. I don't know. I honestly don't understand well the differences anyway.

What is a CygWin port? Also you started once sentence with IIRC. What is that?

Thanks,
Shawn
rmoller
40
40
Posts: 93
Joined: 2004-08-20 09:32

Post by rmoller »

Last things first, IIRC = If I Recall Correctly, sorry to use abbreviations :-] I got smitten along the way...

Cygwin is the DLL that comes along with the program, it provides windows with a UNIX environment/runtime for programs written to use UNIX/POSIX/ system calls. VNC reflector is ported from the *IX platform to Windows.

http://www.realvnc.com/docs/rfbproto.pdf describes the original Remote Frame Buffer protocol, that is, the way messages between server and viewer are encoded in detail. UltraVNC must use a superset of that protocol to do some of its magic like FileTransfer.

When I talk about independent clients, I mean that for every VNC viewer the server has to maintain a separate thread that responds to the viewer, a copy of the screen content of the viewer, the thread compares the server screen to the viewer screen, compresses the difference and sends it to the viewer.
With all the rest of the housekeeping, it subtracts from the CPU available for the server work you wish to do or monitor.

I am happy it works so well for you, I haven't seen anyone able to serve so many simultaneous clients.

regards

Rasmus
bongdud
8
8
Posts: 8
Joined: 2006-03-08 16:01

Have you tried the repeater successfully for load balancing

Post by bongdud »

Shawn,
just wondering if you know the max amount of clients i can use for the reflector. It doesn't seem to specify, or how to submit a signal to the reflector since it does not have it on the help. You said you had some code in perl that turns on and off the reflector?
Let me know.
thanks
Joc
Joc
bongdud
8
8
Posts: 8
Joined: 2006-03-08 16:01

About vnc reflector

Post by bongdud »

Does anyone know about a betterhelp file for the vnc reflector, i am running vncreflector in windows and i cannot seem to figure out the control signals. Does not say how to apply them. also the -a option as well.
thanks
Joc
Joc
Post Reply