• 2023/03/07
  • もろもろ

もろもろ

Composerのオートロード
psr-4

psr-4 の指定

WebSocketのサーバーを立ち上げた時の例を記載しています

プロジェクトフォルダを下記構成とし、サーバー起動はプロジェクトフォルダで『c:\・・・> php bin\server.php』と入力して起動します

プロジェクトフォルダ
     ├ composer.json             // ライブラリ管理ファイル
     ├ composer.lock             // ライブラリ管理ファイル
     └ vendor/                   // ライブラリ本体
     |    └ autoload.php
     └ bin/
     |    └ server.php           // サーバープログラム(起動)
     └ src/
          ├ EspServer.php        // サーバープログラム(本体)
          ├ ???.php

『composer.json』ファイルの autoload に以下の記述をします。名前空間 ”EspApp” に ディレクトリ “./src” を紐付けし、”EspApp” が使用されたら “./src” のディレクトリが検索されて オートロードされるようです(詳しくは知りません)

『composer.json』があるフォルダで『c:\・・・> composer dump-autoload』を入力すると、下記 autoload が反映されます

***************** composer.json *****************
{
  "autoload": {
    "psr-4": {
      "EspApp\\": "src"
    }
  },
  "require": {
    "cboden/ratchet": "^0.4.4"
  }
}

プロジェクトフォルダで『c:\・・・> php bin\server.php』と入力してサーバーを起動しますが、ファイル中で宣言している『use EspApp\EspServer』によって『”./src/EspServer.php”』を参照し『new EspServer()』が実行されます

***************** server.php *****************
<?php
use Ratchet\Server\IoServer;
use Ratchet\Http\HttpServer;
use Ratchet\WebSocket\WsServer;
use EspApp\EspServer;
 
require dirname ( __DIR__ ) . '/vendor/autoload.php';
 
$server = IoServer::factory ( new HttpServer( new WsServer( new EspServer() ) ), 8080 );
$server->run ();
***************** EspServer.php *****************
<?php
namespace EspApp;

use Ratchet\MessageComponentInterface;
use Ratchet\ConnectionInterface;

class EspServer implements MessageComponentInterface

use Ratchet\MessageComponentInterface;
use Ratchet\ConnectionInterface;
{
	public function __construct()
	{
	}
	/*************************/
	/*      オープンイベント       */
	/*************************/
	// $wsInterface Websocket接続オブジェクト
	public function onOpen( ConnectionInterface $wsInterface )
	{
	}
	/*************************/
	/*    メッセージ受信イベント    */
	/*************************/
	// $wsInterface Websocket接続オブジェクト
	// $message     受信メッセージ
	public function onMessage( ConnectionInterface $wsInterface, $message )
	{
	}
	/*************************/
	/*      クローズイベント       */
	/*************************/
	// $wsInterface Websocket接続オブジェクト
	public function onClose( ConnectionInterface $wsInterface )
	{
	}
	/*************************/
	/*       エラーイベント        */
	/*************************/
	// $wsInterface Websocket接続オブジェクト
	// $e           イベント
	public function onError( ConnectionInterface $wsInterface, \Exception $e )
	{
		echo "An error has occurred: {$e->getMessage()}\n";
		$wsInterface->close();
	}
}