开发者

Chat program without a central server

I'm developing a chat application (in VB.Net). It will be a "secure" chat program. All traffic will be encrypted (I also need to find the best approach for this, but that's not the question for now).

Currently the program works. I have a server application and a client application. However I want to setup the application so that it doesn't need a central server for it to work.

What approach can I take to decentralize the network?

I think I need to develop the clients in a way so that they do also act as a server.

How would the clients know what server it needs to connect with / what happens if a server is down? How would the clients / servers now what other nodes there are in the network without having a central server?

At best I don't want the clients to know what the IP addresses are of the different nodes, however I开发者_如何学Go don't think this would be possible without having a central server.

As stated the application will be written in VB.Net, but I think the language doesn't really matter at this point.

Just want to know the different approaches I can follow.


Look for example at the paper of the Kademlia protocol (you can find it here). If you just want a quick overview, look at the Wikipedia page http://en.wikipedia.org/wiki/Kademlia. The Kademlia protocol defines a way of node lookups in a network in a decentral way. It has been successfully applied in the eMule software - so it is tested to really work.

It should cause no serious problems to apply it to your chat software.


You need some known IP address for clients to initially get into a network. Once a client is part of a network, things can be more decentralized, but that first step needs something.

There are basically only two options - either the user provides one (for an existing node of the network - essentially how BitTorrent trackers work), or you hard-code in a gateway node (which is effectively a central server).


Maybe you can see uChat program. It's a program from uTorrent creator with chat without server in mind.

The idea is connect to a swarm from a magnetlink and use it to send an receive messages. This is as Amber answer, you need an access point, may it be a server, a know swarm, manual ip, etc.

Here is uChat presentation: http://blog.bittorrent.com/2011/06/30/uchat-we-just-need-each-other/

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜