Я не уверен, что этот вопрос принадлежит здесь, так как он «спорный», но давайте попробуем.Удаление инструкции коммутатора Запах с сервера Websocket
После прочтения много примеров и вопросов об этом (как this one, который кажется очень похож), я до сих пор не могу понять, если я должен выбрать для полиморфизма, чтобы заменить выключатель.
Это все о сервере Ratchet WebSocket, который принимает сообщения в формате JSON и выполняет подпрограмму в зависимости от сообщения type
:
public function onMessage(ConnectionInterface $from, $msg) {
/*!
Triggers everytime a message is received by the application.
Depending on @p $msg type, the application will broadcast @p $msg accordingly.
@param ConnectionInterface $from
This is the socket (client) who sent @p $msg.
@param string $msg
A JSON string sent by the client.
*/
$usermsg = json_decode($msg, true);
if (isset($usermsg["message"])) {
$actual_msg = $this->removeHTML($usermsg["message"]);
}
switch ($usermsg["type"]) {
case 'text':
$this->text($from, $actual_msg, "text");
break;
case 'token':
$this->token($from, $usermsg["im"]);
break;
case "ready":
$this->ready($from);
break;
case "action":
$this->text($from, $actual_msg, "action");
break;
case "users":
$this->whoIsOnline($from);
break;
case "listen":
$this->listen($from);
break;
case "end":
$this->finish($from, $actual_msg);
break;
case 'statInit':
$this->statInit($from);
break;
}
}
вещи, $msg
является строкой, так как это JSON, ни один объект не конкретизируется для любого сообщения который приходит на всех. Вот почему нет иерархии классов, потому что сообщения не являются объектами. На самом деле, нет другого класса, кроме реального сервера.
В любом случае, это единственный коммутатор, который существует на стороне сервера (в клиенте есть еще один, но это jQuery, так что это совсем другая история), поэтому добавление новых функций должно заключаться в добавлении case AND метода, не так сложно. Проект не будет много расти, но я бы хотел, чтобы его легко масштабировали.
Должен ли я придерживаться дизайна ООП и создавать объект для каждого сообщения, которое приходит и применяет полиморфизм? Кажется немного подавляющим, так как сервер обрабатывает сообщения чата.
Это дает мне хорошую перспективу на чем работать дальше. Поскольку этот проект похож на сценарий «хобби», я должен оставить его на странице. Спасибо за ваше понимание. –