Body of this page last updated 1997-11-01, although the actual material dates from 1994 or 1995. Since I wrote this, ICQ has gone into operation, along with half a dozen other similar systems. I believe most of these are built along Tunachat-like lines. This paragraph added 1999-02-26.

Tunachat

This came out of some thoughts some friends and I had some years ago. It's also related to RFC 1324.

Chatroom servers are pretty simple buggers. Basically, they do three things:

  1. let users look up information about other users and groups
  2. let users send information to other users and groups
  3. distribute the information sent to a group to all of its listeners.

In a traditional chat server, these are all put together in a single big server program. IRC expands this so there are several connected servers that act as one big server. I believe this is the wrong paradigm.

Some different approaches follow.

Distributing the information sent to a group to all of its listeners

The simplest approach is to have a ``group server'' somewhere which knows how to send information to all users. This is the approach that mailing lists generally use. BITNET LISTSERVs and IRC servers have a variation on this, where a group of servers connected together function as the group server.

An alternate approach is to use multicast IP, the way the Network Research Group at Lawrence Berkeley Labs did with their wb application, based on their SRM, or Scalable Reliable Multicast, protocol.

A third approach is to have each user maintain a list of the members of the group, and send a copy of each message to each group member when they want to say something. If I need to refer to this approach, I will call it ``the dumb approach''.

Let users send information to other users and groups

There are basically two approaches to this -- the proxy approach, in which Alice says to a proxy, ``Tell Bob x'', and then the proxy says to Bob, ``Alice told me to tell you x'', and the direct approach, in which Alice sends a message directly to Bob, saying ``x''.

The mechanisms for sending messages to groups are generally the same as the mechanisms for sending messages to users, with some sort of pseudo-user representing a group. Except when they're not. See above.

Looking up information about users and groups

There are basically two approaches to this problem that I know of: the server approach and the synk approach.

In the server approach, there are directory servers that serve large numbers of users. The traditional chat server implements this function in the main server. There may be multiple directory servers in this approach.

In the synk approach, each user and group server maintains some information about other groups and users. When someone has a query, they send that query to the users and groups they know about, which propagate it to others that they know about, and so on, up to a point. Eventually the user gets some answers.

Some ideas about how we could implement these ideas are available.