Не удалось запустить сервер websocket - PullRequest
0 голосов
/ 02 февраля 2020

Я пытаюсь запустить свой сервер веб-сокетов, но он не запускается по какой-то причине, которую я не могу понять. Я использовал этот урок: http://socketo.me/docs/hello-world

У меня есть эта основная папка: введите описание изображения здесь

composer. js:

{
    "autoload": {
        "psr-4": {
            "dealspace_websocket\\": "websocket_src"
        }
    },
    "require": {
        "cboden/ratchet": "^0.4.2"
    }
}

Внутри папки websocket_src находится ТОЛЬКО 1 файл Чат. php:

<?php
namespace dealspace_websocket;
use Ratchet\MessageComponentInterface;
use Ratchet\ConnectionInterface;
require_once __DIR__ . "/../Model/DBConnection.php";

class Chat implements MessageComponentInterface {
    protected $clients;

    public function __construct() {
        $this->clients = new \SplObjectStorage;
    }

    public function onOpen(ConnectionInterface $conn) {
        $this->clients->attach($conn);
    }

    public function onMessage(ConnectionInterface $from, $msg) {
        $JSonMsg = json_decode($msg);
        if($JSonMsg['type'] === 'updownvote') {
            $connection = new DBConnection();
            $allowUpdate = false;
            try {
                $sql = 'UPDATE `deals`
                        SET `votes_counter` = :vc
                        WHERE `id` = :id';
                $stmt = $connection->dbh->prepare($sql);
                $allowUpdate = $stmt->execute(array(
                    'vc' => $JSonMsg['data']['votes'],
                    'id' => $JSonMsg['data']['dealid']
                ));
                if($allowUpdate !== false) {
                    $dataOBJ->dealid = $JSonMsg['data']['dealid'];
                    $dataOBJ->votes = $JSonMsg['data']['votes'];
                    $returnMsg->type = 'updownvote';
                    $returnMsg->date = $dataOBJ;
                    foreach($this->clients as $client) {
                        $client->send(json_encode($returnMsg));
                    }
                }
            } catch(PDOException $e) {}
        }
    }

    public function onClose(ConnectionInterface $conn) {
        $this->clients->detach($conn);
    }

    public function onError(ConnectionInterface $conn, \Exception $e) {
        $conn->close();
    }
}

И последний файл, websocket_server. php:

<?php
    use Ratchet\Server\IoServer;
    use Ratchet\Http\HttpServer;
    use Ratchet\WebSocket\WsServer;
    use dealspace_websocket\Chat;

    require __DIR__ . '/vendor/autoload.php';

    $server = IoServer::factory(
        new HttpServer(
            new WsServer(
                new Chat()
            )
        ),
        8080
    );

    $server->run();
?>

Затем, когда я открываю CMD в главной папке, я запускаю: php websocket_server.php

Это результат: введите описание изображения здесь

Почему это так?

1 Ответ

0 голосов
/ 02 февраля 2020

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *, поэтому * * * * * * * * * * * * * * * * *

* * классы.
<?php

require __DIR__ . '/vendor/autoload.php';

use Ratchet\Server\IoServer;
use Ratchet\Http\HttpServer;
use Ratchet\WebSocket\WsServer;
use dealspace_websocket\Chat;

РЕДАКТИРОВАТЬ


Есть также одна важная часть, которую я сначала не заметил, это опечатка в composer.json необходимо указать префикс пути, на который указывает пространство имен , с помощью /, чтобы указать composer искать файлы в данном каталоге.

В результате json будет :

"psr-4": {
    "dealspace_websocket\\": "websocket_src/"
}

После внесения этого изменения запустите composer dump-autoload

Подробнее об автозагрузке PSR-4 можно узнать здесь и здесь .

...