Главная » Статьи » Статьи из Интернета » Разное

Web-разработка → Пишем сервер на php
Собрался вчера и написал заново сервер на сокетах, чтобы, наконец, полностью отделить логику протокола от манипуляций с сокетами. В итоге получилась библиотека классов, которую благополучно выложил на гугле под LGPL.

Как теперь выглядит запуск сервера:
  1. <?php
  2. require_once(realpath(dirname(__FILE__)).'/SocketServer.php');
  3. $server = new tSocketServer();
  4. $server->attachProtocol(new tSocketProtocol());
  5. if ($server->Bind('127.0.0.1', 4111)){
  6.         echo "Binded\n";
  7.         $server->Start();
  8. }
  9. ?>

Вернемся к протоколу.
Напишем простой «чат».
Допустим, команды разделяются \n, команда quit должна закрыть соединение, остальные команды считаем обычными сообщениями, показываем их всем клиентам, а чтобы отличать от своего ввода, добавим в начало ответа сервера двоеточие.
  1. class MyProtocol extends tSocketProtocol{
  2.     function onData($Connection){
  3.         // Найдем позицию разделителя
  4.         $p = strpos($Connection->ReadBUF, "\n");
  5.         if ($p === false) return;
  6.         // Вырежем команду
  7.         $cmd = substr($Connection->ReadBUF,,$p);
  8.         $Connection->ReadBUF = substr($Connection->ReadBUF, $p+1);
  9.         if (trim($cmd) == 'quit'){
  10.             $this->ConnectionManager->detach($Connection);
  11.         }else{
  12.             $this->WriteToAll(":".$cmd."\r\n");
  13.         }
  14.     }
  15. }

  16. $server = new tSocketServer();
  17. $server->attachProtocol(new MyProtocol());
  18. if ($server->Bind('127.0.0.1', 4111)){
  19.         echo "Binded\n";
  20.         $server->Start();
  21. }

Как выглядит сессия:
telnet>o 127.0.0.1 4111
cmd2
:cmd2
cmd1
:cmd1
quit


Connection to host lost.

Press any key to continue...


Сама библиотека: http://code.google.com/p/tsock/
______________________
Текст подготовлен в Хабра Редакторе от © SoftCoder.ru


Источник: http://habrahabr.ru/blogs/webdev/57631/
Категория: Разное | Добавил: mobilekid ( 19.04.2009 )
Просмотров: 414 | Рейтинг: 0.0/0
Всего комментариев: 0


Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]