Хорошо ли использовать соединение с базой данных в веб-сокетах PHP? - PullRequest
0 голосов
/ 04 июня 2019

Я новый программист и работаю над проектом Symfony, который представляет собой простую социальную сеть.Итак, я хочу знать, является ли плохой практикой использование соединения с базой данных непосредственно в храповике, как это:

class Chat implements MessageComponentInterface
{
private $pdo;
protected $clients;

public function __construct() {
    $this->pdo = new \PDO('mysql:host=localhost;dbname=symfony_social_network;charset=utf8', 'root', null);;
    $this->clients = [];
}

А затем использовать его в таких функциях:

public function onMessage(ConnectionInterface $from, $msg) {
    $msgContent = json_decode($msg, true);
    switch ( $msgContent['command'] ) {
        case 'addMessage':
            $this->addMessage($myId, $msgContent, $from);
            break;
        .....
}

Добавитьфункция сообщения:

private function addMessage($myId, $msg)
{
    $acceptUser = htmlspecialchars($msg['acceptUser']);
    $dateNow    = htmlspecialchars(date('Y-m-d H:i:s'));
    $content    = htmlspecialchars($msg['content']);
    $sql = 'INSERT INTO messages (`accept_user`, `send_user`, `content`, `date_added`, `is_delivered`, `is_seen`)
            VALUES (?, ?, ?, ?, ?, ?)';

    $stmt = $this->pdo->prepare($sql);

    if ( isset($this->clients[$acceptUser]) ) {
        $stmt->execute([$acceptUser, $myId, $content, $dateNow, 1, 0]);
    }else {
        $stmt->execute([$acceptUser, $myId, $content, $dateNow, 0, 0]);
    }
    return $this->pdo->lastInsertId();
}

Или лучше использовать AJAX.Затем использовать ZMQ для отправки сообщения в веб-сокет, а затем веб-сокет для отправки определенному пользователю.Примерно так:

/**
 * @Route("/addMessage", methods={"POST"})
 */
public function addMessage(Request $request) {

        ....

        $context   = new \ZMQContext(1);
        $socket    = $context->getSocket(\ZMQ::SOCKET_PUSH);
        $socket->connect("tcp://127.0.0.1:5555");
        $socket->send(json_encode($arr));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...