PHP WebSocket на платформе приложений DigitalOceanPhp

Кемеровские программисты php общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 PHP WebSocket на платформе приложений DigitalOcean

Сообщение Anonymous »

Я пытаюсь создать сервер веб-сокетов на платформе приложений DigitalOcean, используя PHP в качестве внутреннего сокет-сервера.
Цель состоит в том, чтобы использовать веб-сокет для многопользовательской игры в реальном времени, используя Java для клиентского приложения и PHP для серверной части. Сейчас я сначала разрабатываю серверную часть.
Я попробовал этот код локально, и он работает.
composer.json:

Код: Выделить всё

{
"name": "my/testratchet",
"require": {
"cboden/ratchet": "0.4.4"
}
}
startServer.php:

Код: Выделить всё

require_once('MySocketServer.php');
use TestWebSockets\MySocketServer;

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

$DEFAULT_URL  = 'localhost';

$DEFAULT_PORT = 8080;

// Run the server application through the WebSocket protocol on port 8080
$app = new Ratchet\App($DEFAULT_URL, $DEFAULT_PORT);
$app->route('/chat', new MySocketServer(), array('*'));
$app->route('/echo', new Ratchet\Server\EchoServer, array('*'));
$app->run();
MySocketServer.php:

Код: Выделить всё

namespace TestWebSockets;

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

use Exception;
use Ratchet\ConnectionInterface;
use Ratchet\MessageComponentInterface;

class MySocketServer 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) {
echo "Received data: $msg\n";
foreach ($this->clients as $client) {
if ($from != $client) {
$client->send($msg);
}
}
}

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

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

Код: Выделить всё

var conn = new WebSocket('ws://localhost:8080/echo');
conn.onmessage = function(e) { console.log(e.data); };
conn.onopen = function(e) { conn.send('Hello Me!'); };

Чтобы проверить: [*]из браузера:
  • откройте консоль с помощью F12
  • перейдите на вкладку «Сеть»
  • в типе URL-адреса http://localhost/projectDir/testClientWeb.php
  • в консоли появляется строка сети: нажмите на нее и перейдите на внутреннюю вкладку Response . Вы увидите:

    Код: Выделить всё

    ↑ Hello Me!
    (зеленая стрелка: отправлено)
  • Код: Выделить всё

    ↓ Hello Me!
    (красная стрелка: получено)



Теперь, прежде чем развернуть его в цифровом океане, я заменил «localhost» на «my-generated-project-url.ondigitalocean.app» и «ws» на «wss», потому что это необходимо. DigitalOcean, в App Platform есть только один открытый порт — 8080, и SSL обязателен, поэтому мне нужно использовать wss для подключения к сокету сервера.
Затем в цифровом океане я создал приложение на платформе приложений со следующими настройками:
  • источник: мой репозиторий
  • только один компонент как «Веб-сервис»
  • Каталог исходного кода : /
  • автоматическое развертывание: включено
  • 0 переменных среды
  • только один маршрут: /
  • Проверка работоспособности: TCP
  • Команда сборки: нет
  • Команда запуска: Heroku-php-apache2 && php startServer.php
    Порт HTTP: 8080
После развертывания приложения закончено, это результат «Журналов выполнения» в цифровом океане:

Код: Выделить всё

Detected
Detected 512MiB of RAM
PHP memory_limit is 128M Bytes
Starting php-fpm with 4 workers...
Starting httpd...
Application ready for connections on port 8080.
Когда я просматриваю страницу клиента (https://my-generated-project-url.ondigi ... entWeb.php), вывод в «Журналах времени выполнения» в цифровом океане выглядит следующим образом: :

Код: Выделить всё

"GET /testClientWeb.php HTTP/1.1" 200 295 "-" "Mozilla...
При проверке сети браузером возникает эта ошибка (мой Firefox уже обновлен без каких-либо надстроек):
Изображение

Я попробовал пример (с узлом js), показанный в этом официальном опубликуйте сообщение, и оно работает: https://docs.digitalocean.com/developer ... -platform/, но мне нужно использовать PHP в качестве бэкэнда.
Как заставить его работать с PHP?
Спасибо

Подробнее здесь: https://stackoverflow.com/questions/772 ... p-platform
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Php»