Wednesday, June 30, 2010

How to create a socket server in PHP

EDIT: If you need to submit bugs or want to improve my
work, its now available on github!

Ever
tried searching for information on how to properly create a multi-client socket server in PHP?  You’ll get
plenty of results with outdated and messy source code, some of which won’t even work.

This
was the conclusion I'd come to a couple years ago when I decided that I wanted to try my hand at writing an
IRC server.  The why is not important… (For the fun of building an IRC Server, if you can call
that fun
).  So I googled around a bit until I finally found some code that worked on its own, and
quickly built a semi-functional IRC server using it, and headed off to sleep at 5am.

The
next day I was very, very happy with the results of my hard labor, but it wasn't good enough, so I started
re-writing it from scratch as an Object, and thus I created class::IRCServer.

Then,
once I felt that I was finished screwing around with my newly built IRCd, I decided to modify the function
enough to be used on its own as a socket server, to share with the world.  However, that was a couple years
ago (The non-edited version of this article was written in 2010).

Recently, however,
PHP has evolved to a point where the Socket Server class I had written was out-dated, buggy, and just plain
bad.

So I built a new library from
scratch after looking at the old code, and came up with Navarr\Socket
.  The code is open-source,
MIT-license, and available on Github.  I heavily encourage you to fork and submit pull requests.  The code
is namespaced, follows the PSR-2 standard,   and even has some PHPUnit tests.