Jeff Barr's Blog

Things I Like..

Ping Processing

The ping is a lightweight messaging system which allows one site to tell another site that it has changed. It was first used at weblogs.com and supported in Radio Userland.

The ping itself takes the form of an XML-RPC function call. There are two varieties in common use: weblogUpdates.ping and weblogUpdates.extendedPing. A single site can support either or both; Syndic8 supports both. The ping call accepts site name and site URL parameters. It does not include the URL of the site’s feed. The extendedPing includes this URL as well as another parameter that I have yet to deciper.

Syndic8 does some relatively complex processing each time a ping is received, and I was concerned that it would not scale (other sites have had this problem). So far, so good. According to the ping status page, we have processed over 687,000 pings, averaging 10-12 per minute. There are several reasons for this. First is that I am a really, really great developer, of course. Second, PHP and MySQL are efficient, and I used some tricks such as asynchronous processing and an in-memory database table to squeeze every last bit of efficiency out of the system.

The most recent set of pinged feeds can be viewed in the Syndic8 Ping Box. It is important to note that this box is limited to the pings which represent feeds known to Syndic8. An important aspect of the ping processing logic is the discovery mechanism used to turn pings into potential feeds and then ultimately into actual feeds.

The most recent ping list is also available as an RSS feed, of course.

I have plans to do a lot more with the pinging system, and it would be great to see even more sites ping Syndic8. This can be done with an XML-RPC call to ping.syndic8.com, or it can be done indirectly via a call to pingomatic.com. A call to pingomatic will also serve to ping many other sites.