TeamViewer alternative

JohnC

Expert
Licensed User
Longtime User
Yes they are under heavy load because it receives and sends the texts, gestures, device layout changes and more.
Hi,

I have purchased the source code, but not had a chance to look everything over.

So, the above statement is confusing to me because I thought that the backend is only used to initiate an initial hand-shake, then a direct connection is established between the two clients from that point on, so a backend "server" is no longer needed for that session anymore.

If this is not an accurate understanding of the system, then is there a "System Description" document available that explains the different parts of the system and what each part does?
 

sfsameer

Well-Known Member
Licensed User
Longtime User
Hi,

I have purchased the source code, but not had a chance to look everything over.

So, the above statement is confusing to me because I thought that the backend is only used to initiate an initial hand-shake, then a direct connection is established between the two clients from that point on, so a backend "server" is no longer needed for that session anymore.

If this is not an accurate understanding of the system, then is there a "System Description" document available that explains the different parts of the system and what each part does?
Hello :)

The Database role in this project is as the following :
1- Users information
2- Connections info (Hand-shake)
3- Transmitting Keyboard inputs ---Heavy load
4- Transmitting Touches, Gestures and Mouse inputs --- Heavy load
5- Address book information

The Servers (JRDC2 and JRDC2 Audio) role in this project is as the following :
1- Connections establishments (Clients X Clients X SQL)
2- Transmitting Screens Captures
3- Transmitting Audio Streams

So the Database is really important, without it there will not be any inputs transferring (Mouse clicks, Keyboard inputs, Touches and gestures, etc...)

Thank you,
Saif
 

JohnC

Expert
Licensed User
Longtime User
Hi,

VNC is an open-source protocol for remote control. From what I understand, all the input/screen changes are handled directly between the two clients after a connection is established, so server load is reduced to zero after the connection is made between the clients.

I would be interested in knowing what your dev team thinks about the use of this VNC protocol to help increase the efficiency of your product.

Here is some more info on VNC:

 
Last edited:

sfsameer

Well-Known Member
Licensed User
Longtime User
Hi,

VNC is an open-source protocol for remote control. From what I understand, all the input/screen changes are handled directly between the two clients after a connection is established, so server load is reduced to zero after the connection is made between the clients.

I would be interested in knowing what your dev team thinks about the use of this VNC protocol to help increase the efficiency of your product.

Here is some more info on VNC:

You could transmit the input transfers through the JRDC2 but we wouldn't recommend it because you will stress the server Unless you have a really good VPS server.
 

JohnC

Expert
Licensed User
Longtime User
You could transmit the input transfers through the JRDC2 but we wouldn't recommend it because you will stress the server Unless you have a really good VPS server.
I am confused. I was recommending if your dev team would be interested in using the VNC protocol so that nothing will have to go through any server after the two clients are connected to each other. This way it reduces the load to the server by 100% and eliminates the additional propagation delay of all inputs and screen changes having to first go through a server before reaching the other client.
 

sfsameer

Well-Known Member
Licensed User
Longtime User
I am confused. I was recommending if your dev team would be interested in using the VNC protocol so that nothing will have to go through any server after the two clients are connected to each other. This way it reduces the load to the server by 100% and eliminates the additional propagation delay of all inputs and screen changes having to first go through a server before reaching the other client.
My apologies I miss read your suggestion.

As for the Vnc we will study it first and post the updates regarding that matter here. :)

On the side info:
We have seen RealVNC before and we even contacted the company and they said that we have to pay 12$ for at least 1000 clients per year = 12000$ per year because once we implement their service the connections will go through their servers so a server here is a mandatory, BUT never say never so tomorrow morning we will start studying the above suggested solution and will keep you guys posted :)
 

JohnC

Expert
Licensed User
Longtime User
The VNC protocol itself is open source and free:


The original VNC protocol does NOT need any servers because it can connect the host to the client directly if the client IP address and port are known.

But RealVNC created a custom variation that needs to go through their servers so they can charge money. (Just a FYI, I have their VNC viewer 1.2.11 running on my Android phone and it has the ability to connect to my clients directly without needing to go through any server. But then they got wise and their newer versions need to go through their servers so they can charge money.)

The main reason why a server is needed is if the client or host are behind a firewall which does not have port forwarding enabled, so a host can not easily connect to a client.

However, there are ways to work around this. For example, UltraVNC (another variation of VNC) created a "Repeater" app that allows a host and client to connect to each other even behind firewalls:


So instead of having your system go through a database with a heavy load, maybe your dev team can implement the free VNC protocol and then develop your own repeater app that we can install on our servers.
 
Last edited:

moster67

Expert
Licensed User
Longtime User
Hmm..I am not sure I am following this correctly.

We bought the sources knowing beforehand what this system had to offer and how it was structured.

We now have the sources and if we would like to eliminate the server, then we can do it.
We did not buy a finished product, we bought the sources so we can make it into a finished product adding, deleting or modifying anything we think is fit.

Sfsameer and his team delivered what was promised and even more by adding an update.

I have used the sources and implemented my own solution.

If you want his team to do it, then I think it's time to open the wallet and pay them good money.
 

JohnC

Expert
Licensed User
Longtime User
We bought the sources knowing beforehand what this system had to offer and how it was structured.

It seems you misunderstood my posts.

I would agree with you of what features were being offered beforehand, but there was little info on how they would be implemented. Actually, when Sfsameer mention in post #53 that they are using RFB (part of VNC), I thought they were going to implement the full VNC protocol. I did not realize that all inputs and screen capture would need to go through an intermediate server database, which to me is a huge load/bottleneck.

And since it appears that Sfsameer didn't realize that the VNC protocol was free/open sourced, I just wanted to clear that up in case they were interested in switching to VNC in the future to improve the product performance and ease of implementation.

And of course I would expect to pay more for them to make such a significant change - people deserve to be compensated for their effort, just like I was happy to pay you for your ffmpeg work ;)
 

JohnC

Expert
Licensed User
Longtime User
I just wanted to make one thing crystal clear...

I make suggestions all the time to various companies because when I like a product, I sometimes feel a tweak or two would just make it that much better.

And I sincerely appreciate all the work and project source code that Sfsameer and his team have done and continue to do with B4x.

The cost and quality of his codes are of extremely high value and that is why I have made multiple purchases of their products and will continue to do so in the future!
 

sfsameer

Well-Known Member
Licensed User
Longtime User
@moster67 and @JohnC to make both of you happy,consider VNC implementation done, we will implement it in the next update as soon as we study and figure the technology behind it :)

♥ Thank you both for your trust and your kind words ♥

*BTW there is a really really great update coming very soon, we can't announce it yet until we have finished developing it :)
 
Last edited:

moster67

Expert
Licensed User
Longtime User
I make suggestions all the time to various companies because when I like a product, I sometimes feel a tweak or two would just make it that much better.

I just think that they delivered what was promised and that we can't really ask them to continue adding features, without being compensated, at least for new features that we might very well be able to add ourselves.

It seems you misunderstood my posts.
I guess I did. Sorry. :)
 

JohnC

Expert
Licensed User
Longtime User
I just think that they delivered what was promised and that we can't really ask them to continue adding features, without being compensated, at least for new features that we might very well be able to add ourselves.
Trust me, being a developer and seeing people always expecting things for free, I'm usually the "sucker" that donates to everyone if I use a free product on a regular basis.

I'm the one who donates to Wikipedia, Mozilla, etc. because I use their products and I actually feel a little guilty if I don't donate 🙁
 

JohnC

Expert
Licensed User
Longtime User
...consider VNC implementation done, we will implement it in the next update as soon as we study and figure the technology behind it :)
Sfsameer, if you do implement it, that would be awesome and I would be first in line to pay the v2 upgrade cost :)
 

sfsameer

Well-Known Member
Licensed User
Longtime User
Hello,

*We are reading about RealVNC and the first thing we read was :
VNC Server captures the desktop of the computer in real-time and sends it to VNC Viewer for display. VNC Viewer gathers your input (mouse, keyboard, or touch) and sends it for VNC Server to inject and actually achieve remote control.
Reference : https://bit.ly/2PfPSHj

So it's Client X Server X Client
They are using a server as a middle ware.
The only thing is different from our project is the need of the database to transmit the inputs rather than just implementing the inputs in sockets directly.

Then we read about the second solution as suggested above, "Repeater" but if you read about it more (you could actually see it in the official diagram in their website) you will find out that it also redirects all the connections between the clients to a server and the server transmits the inputs and the screen buffers accordingly.

@JohnC could you please explain what should we change? because the RealVNC and the UVNC Repeater are using the same methods we are using except the Database for the inputs but other than that it's the same method.

:)

Thank you,
Saif
 

JohnC

Expert
Licensed User
Longtime User
The host and client of VNC can talk to each other directly without needing a server (or database) if the IP address and port number of the client are known.

The only time a server (for example running the UltrVNC repeater) is needed with VNC, is to connect a host and a client if the client or host are behind a firewall. In that case, a repeater is needed to make the connection as a proxy between the two IP's and ports of each app. So when a repeater is used, data packets simply flow in one port and get sent out another port. Again, no database transcoding is required.

And as you mentioned, there is a "heavy load" on the database to handle the inputs using the method you are currently using.

My suggestion to use VNC is two fold:

1) By eliminating the database processing, it will lower the server demand significantly and decrease propagation in communication between apps for quicker screen updates, FPS, etc.
2) Also, by eliminating the requirement of a middleman database, it would even allow a client to directly connect to a host using a "reverse connection", eliminating the need for a server or repeater at all.

But this is just a suggestion. Ultimately, I need to be able to remote control (support) both iOS and Android users. So, if your method supports both platforms and VNC protocol can not support iOS, then that would be a deal-breaker for me with the VNC and a major plus for your current method.
 

sfsameer

Well-Known Member
Licensed User
Longtime User
The host and client of VNC can talk to each other directly without needing a server (or database) if the IP address and port number of the client are known.

The only time a server (for example running the UltrVNC repeater) is needed with VNC, is to connect a host and a client if the client or host are behind a firewall. In that case, a repeater is needed to make the connection as a proxy between the two IP's and ports of each app. So when a repeater is used, data packets simply flow in one port and get sent out another port. Again, no database transcoding is required.

And as you mentioned, there is a "heavy load" on the database to handle the inputs using the method you are currently using.

My suggestion to use VNC is two fold:

1) By eliminating the database processing, it will lower the server demand and decrease propagation in communication between apps for quicker screen updates, FPS, etc.
2) Also, by eliminating the requirement of a middleman database, it would even allow a client to directly connect to a host using a "reverse connection", eliminating the need for a server or repeater at all.

But this is just a suggestion. Ultimately, I need to be able to remote control (support) both iOS and Android users. So, if your method supports both platforms and VNC protocol can not support iOS, then that would be a deal-breaker for me with the VNC and a major plus for your current method.
So :
1- Removing the Inputs, gestures, keyboard strokes, chat messages from the database and implement it in the server directly.
2- Check if the client is a local client and not a remote client (outside the network) then the connection will be Client X Client without the need to connect to the server to transmit the inputs, frame buffers, etc..

The above are your requests as i understood. is that correct?

Thank you,
Saif
 
Top