SocketManager
in package
ソケットマネージャークラス
ソケットリソースの管理と周期ドリブンの制御を行う
周期ドリブンマネージャーを「プロトコル」部と「コマンド」部に分類して管理する
Table of Contents
Constants
- E_CLASS_NAME_FOR_UNIT = 'SocketManager\Library\UnitException'
- EXCEPTIONクラス名(UNIT処理用)
- SOCKET_ERROR_COULDNT_COMPLETED = 10035
- ソケット操作を完了できなかった
- SOCKET_ERROR_PEER_SHUTDOWN = [10053, 10054, 104]
- 相手先による切断
- UDP_CONNECTION_IDENTIFY = ''
- UDP接続識別データ
Properties
- $await_connection_id : string|null
- 待ち受け用ソケットの接続ID
- $await_host : string
- 待ち受け用ホスト
- $await_port : int
- 待ち受け用ポート
- $changed_descriptors : mixed
- 前回のSELECT状態が格納される
- $command_dispatcher : mixed
- コマンドディスパッチャー
- $cycle_driven_for_command : CycleDrivenManager
- 周期ドリブンマネージャー(コマンドUNIT用)
- $cycle_driven_for_protocol : CycleDrivenManager
- 周期ドリブンマネージャー(プロトコルUNIT用)
- $descriptors : array<string|int, mixed>
- 【ディスクリプタのリスト】
- $emergency_callback : mixed
- 緊急停止時のコールバック
- $lang : string
- 言語設定
- $limit_connection : int
- 制限接続数
- $log_writer : mixed
- ログライター
- $next_connection_id : int
- NEXT接続ID
- $receive_buffer_size : int
- 受信サイズ(recvメソッドのデフォルト受信サイズ)
- $serializer : mixed
- シリアライザー
- $sockets : array<string|int, mixed>
- ソケットリソースのリスト
- $unit_parameter : SocketManagerParameter|null
- SocketManager用として扱うUNITパラメータ
- $unserializer : mixed
- アンシリアライザー
Methods
- __construct() : mixed
- コンストラクタ
- aliveCheck() : bool
- アライブチェックを行う
- bind() : bool
- ソケットバインド(UDP用)
- close() : bool
- ソケット切断シーケンスの開始
- connect() : bool
- ソケット接続
- cycleDriven() : bool
- 周期ドリブン処理の実行
- getAwaitConnectionId() : string|null
- 待ち受けポートの接続IDを取得
- getAwaitHost() : string|null
- 待ち受けホスト名を取得
- getAwaitPort() : int|null
- 待ち受けポート番号を取得
- getClientCount() : int
- 現在のクライアント数を取得
- getConnectionIdAll() : array<string|int, mixed>
- 全接続IDを取得
- getProperties() : array<string|int, mixed>
- プロパティの取得(ディスクリプタ内)
- getQueueName() : string|null
- キュー名の取得
- getStatusName() : string|null
- ステータス名の取得
- getUnserializer() : mixed
- アンシリアライザーの取得
- getUserProperties() : mixed
- ユーザープロパティの取得(ディスクリプタ内)
- isExecutedQueue() : bool
- キューの実行状況を検査
- isExistDescriptor() : bool
- ソケットディスクリプタの存在を検査
- isReceiving() : bool
- (receivingメソッドによる)データ受信中の検査
- isSending() : bool
- (sendingメソッドによる)データ送信中の検査
- listen() : bool
- ソケットリッスン(TCP用)
- logWriter() : mixed
- ログ出力
- receiving() : mixed
- データ受信
- recv() : int
- データ受信
- sending() : bool|null
- データ送信
- setCommandUnits() : mixed
- IEntryUnitsによるUNIT登録(コマンド用)
- setInitSocketManager() : mixed
- IInitSocketManagerによる初期化
- setProperties() : bool
- プロパティの設定(ディスクリプタ内)
- setProtocolUnits() : mixed
- IEntryUnitsによるUNIT登録(プロトコル用)
- setReceivingSize() : bool
- データ受信サイズの設定
- setRecvStack() : bool
- 受信データスタックへ設定
- setSendingData() : bool
- 送信データの設定
- setSendStack() : bool
- 送信データスタックへ設定
- setSendStackAll() : bool
- 全接続の送信データスタックへ設定
- setStatusName() : mixed
- ステータス名の設定
- setUserProperties() : bool
- ユーザープロパティの設定(ディスクリプタ内)
- shutdown() : bool
- ソケットクローズ
- shutdownAll() : bool
- ソケット全クローズ
- throwBreak() : mixed
- プロトコルUNIT処理を中断する
- createDescriptor() : array<string|int, mixed>|bool
- ソケットディスクリプタの生成
- executeUnit() : bool
- UNITの実行
- getRecvStack() : mixed
- 受信データスタックから取得
- getSendStack() : mixed
- 送信データスタックから取得
- getSerializer() : mixed
- シリアライザーの取得
- isExecutingSequence() : bool
- UNIT実行中の検査
- select() : bool
- ソケットセレクト
- setQueueNameForStart() : bool
- キュー名の設定(処理開始用)
Constants
E_CLASS_NAME_FOR_UNIT
EXCEPTIONクラス名(UNIT処理用)
private
mixed
E_CLASS_NAME_FOR_UNIT
= 'SocketManager\Library\UnitException'
SOCKET_ERROR_COULDNT_COMPLETED
ソケット操作を完了できなかった
private
mixed
SOCKET_ERROR_COULDNT_COMPLETED
= 10035
SOCKET_ERROR_PEER_SHUTDOWN
相手先による切断
private
mixed
SOCKET_ERROR_PEER_SHUTDOWN
= [10053, 10054, 104]
UDP_CONNECTION_IDENTIFY
UDP接続識別データ
private
mixed
UDP_CONNECTION_IDENTIFY
= ''
Properties
$await_connection_id
待ち受け用ソケットの接続ID
private
string|null
$await_connection_id
= null
$await_host
待ち受け用ホスト
private
string
$await_host
= '127.0.0.1'
$await_port
待ち受け用ポート
private
int
$await_port
= 10000
$changed_descriptors
前回のSELECT状態が格納される
private
mixed
$changed_descriptors
= []
$command_dispatcher
コマンドディスパッチャー
private
mixed
$command_dispatcher
= null
受信バッファスタックにデータがある場合実行される
$cycle_driven_for_command
周期ドリブンマネージャー(コマンドUNIT用)
private
CycleDrivenManager
$cycle_driven_for_command
$cycle_driven_for_protocol
周期ドリブンマネージャー(プロトコルUNIT用)
private
CycleDrivenManager
$cycle_driven_for_protocol
$descriptors
【ディスクリプタのリスト】
private
array<string|int, mixed>
$descriptors
= []
内訳は以下の通り
接続ID(<'#' + 番号>形式)
'connection_id' => 接続ID(string),
送信バッファスタック
基本的にはコマンドUNITでスタックされプロトコルUNITでスタックされたデータを送信する
'send_buffers' => 送信データ配列(array),
受信バッファスタック
基本的にはプロトコルUNITでスタックされコマンドUNITで抽出される
'recv_buffers' => 受信データ配列(array),
受信バッファ
基本的にはプロトコルUNITで受信中のデータを扱う
'receiving_buffer' => [
'size' => 受信サイズ(int),
'data' => 受信データ(string),
'receiving_size' => 受信中のサイズ(int)
]
送信バッファ
基本的にはプロトコルUNITで送信中のデータを扱う
'sending_buffer' => [
'data' => 送信データ(string),
]
ピックアップ受信バッファ
コマンドディスパッチャー用にピックアップしてからコマンドUNITで使用する
'receive_buffer' => 受信データ(ペイロード部)
ピックアップ送信バッファ
プロトコルUNITの送信処理前にピックアップされるデータ
'send_buffer' => 送信データ(ペイロード部)
プロトコルUNITで利用される名称
'protocol_names' => [
'queue_name' => キュー名(string),
'status_name' => ステータス名(string)
],
コマンドUNITで利用される名称
'command_names' => [
'queue_name' => キュー名(string),
'status_name' => ステータス名(string)
],
最終アクセス日時
'last_access_timestamp' => タイムスタンプ(int),
強制ディスパッチフラグ
'forced_dispatcher' => true(ディスパッチ実施) or false(実施しない),
ユーザープロパティ(自由定義)
'user_property' => プロパティ配列(array),
$emergency_callback
緊急停止時のコールバック
private
mixed
$emergency_callback
= null
例外等の緊急切断時に実行される
$lang
言語設定
private
string
$lang
= 'ja'
デフォルト:'ja'
$limit_connection
制限接続数
private
int
$limit_connection
= 10
$log_writer
ログライター
private
mixed
$log_writer
= null
$next_connection_id
NEXT接続ID
private
int
$next_connection_id
= 0
$receive_buffer_size
受信サイズ(recvメソッドのデフォルト受信サイズ)
private
int
$receive_buffer_size
= 1024
$serializer
シリアライザー
private
mixed
$serializer
= null
ペイロード部のシリアライズ処理
$sockets
ソケットリソースのリスト
private
array<string|int, mixed>
$sockets
= []
$unit_parameter
SocketManager用として扱うUNITパラメータ
private
SocketManagerParameter|null
$unit_parameter
= null
$unserializer
アンシリアライザー
private
mixed
$unserializer
= null
ペイロード部のアンシリアライズ処理
Methods
__construct()
コンストラクタ
public
__construct([string $p_host = null ][, int $p_port = null ][, int $p_size = null ][, int $p_limit = null ]) : mixed
Parameters
- $p_host : string = null
-
待ち受け用ホスト名
- $p_port : int = null
-
待ち受け用ポート番号
- $p_size : int = null
-
受信サイズ(recvメソッドのデフォルト受信サイズ)
- $p_limit : int = null
-
接続制限数
aliveCheck()
アライブチェックを行う
public
aliveCheck(string $p_kind, string $p_cid, int $p_tout) : bool
任意のタイミングで一時的に実行したい時に利用する
※既に設定済みの場合は何もせずに終了する
Parameters
- $p_kind : string
-
UNIT種別("protocol_names" or "command_names")
- $p_cid : string
-
接続ID
- $p_tout : int
-
アライブチェックタイムアウト(秒)
Return values
bool —true(成功) or false(失敗)
bind()
ソケットバインド(UDP用)
public
bind([string $p_host = null ][, int $p_port = null ]) : bool
引数のホスト名とポート番号の指定があれば、コンストラクタで設定された内容より優先されます
Parameters
- $p_host : string = null
-
ホスト名
- $p_port : int = null
-
ポート番号
Return values
bool —true(成功) or false(失敗)
close()
ソケット切断シーケンスの開始
public
close(string $p_cid[, mixed $p_param = null ][, bool $p_convert = true ]) : bool
プロトコルUNIT実行中に呼ばれた場合は例外を投げて現在の処理を中断する
Parameters
- $p_cid : string
-
接続ID
- $p_param : mixed = null
-
切断パラメータ
- $p_convert : bool = true
-
― 変換(シリアライズ/アンシリアライズの行使)フラグ
― フラグ指定に関わらずシリアライザーが登録されていなければ変換はされない
Return values
bool —true(成功) or false(失敗)
connect()
ソケット接続
public
connect(string $p_host, int $p_port[, bool $p_udp = false ][, int $p_retry = 0 ][, int $p_interval = 1000 ]) : bool
Parameters
- $p_host : string
-
ホスト名
- $p_port : int
-
ポート番号
- $p_udp : bool = false
-
UDPフラグ true(UDP) or false(TCP)
- $p_retry : int = 0
-
リトライ回数(0:無限)
- $p_interval : int = 1000
-
リトライ間隔(μs)
Return values
bool —true(成功) or false(失敗)
cycleDriven()
周期ドリブン処理の実行
public
cycleDriven([int $p_cycle_interval = 2000 ][, int $p_alive_interval = 0 ]) : bool
Parameters
- $p_cycle_interval : int = 2000
-
周期インターバルタイム(マイクロ秒)
- $p_alive_interval : int = 0
-
アライブチェックインターバルタイム(秒)
Return values
bool —true(成功) or false(失敗)
getAwaitConnectionId()
待ち受けポートの接続IDを取得
public
getAwaitConnectionId() : string|null
Return values
string|null —待ち受けポートの接続ID
getAwaitHost()
待ち受けホスト名を取得
public
getAwaitHost() : string|null
Return values
string|null —待ち受けホスト名
getAwaitPort()
待ち受けポート番号を取得
public
getAwaitPort() : int|null
Return values
int|null —待ち受けポート番号
getClientCount()
現在のクライアント数を取得
public
getClientCount() : int
Return values
int —クライアント数
getConnectionIdAll()
全接続IDを取得
public
getConnectionIdAll([string $p_cid = null ]) : array<string|int, mixed>
Parameters
- $p_cid : string = null
-
除外する接続ID
Return values
array<string|int, mixed> —接続IDのリスト
getProperties()
プロパティの取得(ディスクリプタ内)
public
getProperties(string $p_cid, array<string|int, mixed> $p_prop) : array<string|int, mixed>
Parameters
- $p_cid : string
-
接続ID
- $p_prop : array<string|int, mixed>
-
プロパティ名のリスト
Return values
array<string|int, mixed> —プロパティのリスト or null(空) or false(失敗)
getQueueName()
キュー名の取得
public
getQueueName(string $p_kind, string $p_cid) : string|null
Parameters
- $p_kind : string
-
取得対象種別('protocol_names' or 'command_names')
- $p_cid : string
-
接続ID
Return values
string|null —キュー名 or null(なし)
getStatusName()
ステータス名の取得
public
getStatusName(string $p_kind, string $p_cid) : string|null
Parameters
- $p_kind : string
-
取得対象種別('protocol_names' or 'command_names')
- $p_cid : string
-
接続ID
Return values
string|null —キュー名 or null(なし)
getUnserializer()
アンシリアライザーの取得
public
getUnserializer() : mixed
受信データ(ペイロード部)のアンシリアライズ処理
Return values
mixed —関数(あるいは関数名) or null(空)
getUserProperties()
ユーザープロパティの取得(ディスクリプタ内)
public
getUserProperties(string $p_cid, array<string|int, mixed> $p_prop) : mixed
Parameters
- $p_cid : string
-
接続ID
- $p_prop : array<string|int, mixed>
-
ユーザープロパティのリスト
Return values
mixed —ユーザープロパティデータ or null(空) or false(失敗)
isExecutedQueue()
キューの実行状況を検査
public
isExecutedQueue(string $p_cid, string $p_kind, string $p_que_nm) : bool
Parameters
- $p_cid : string
-
接続ID
- $p_kind : string
-
UNIT種別("protocol_names" or "command_names")
- $p_que_nm : string
-
キュー名
Return values
bool —true(実行中) or false(停止中)
isExistDescriptor()
ソケットディスクリプタの存在を検査
public
isExistDescriptor(string $p_cid) : bool
Parameters
- $p_cid : string
-
接続ID
Return values
bool —true(存在する) or false(存在しない)
isReceiving()
(receivingメソッドによる)データ受信中の検査
public
isReceiving(string $p_cid) : bool
Parameters
- $p_cid : string
-
接続ID
Return values
bool —true(受信中) or false(受信中ではない)
isSending()
(sendingメソッドによる)データ送信中の検査
public
isSending(string $p_cid) : bool
Parameters
- $p_cid : string
-
接続ID
Return values
bool —true(送信中) or false(送信中ではない)
listen()
ソケットリッスン(TCP用)
public
listen([string $p_host = null ][, int $p_port = null ]) : bool
引数のホスト名とポート番号の指定があれば、コンストラクタで設定された内容より優先されます
Parameters
- $p_host : string = null
-
ホスト名
- $p_port : int = null
-
ポート番号
Return values
bool —true(成功) or false(失敗)
logWriter()
ログ出力
public
logWriter(string $p_level, array<string|int, mixed> $p_param) : mixed
SocketManagerで使用しているチャンネル名と同じになる
Parameters
- $p_level : string
-
ログレベル
- $p_param : array<string|int, mixed>
-
ログパラメータ
receiving()
データ受信
public
receiving(string $p_cid) : mixed
setReceivingSizeで設定されたサイズ分を受信するまで続ける
※プロトコルUNITで使用
Parameters
- $p_cid : string
-
接続ID
Return values
mixed —受信データ or null(受信中) or false(失敗)
recv()
データ受信
public
recv(string $p_cid, mixed &$p_recv[, int $p_size = null ]) : int
受信バッファサイズ分を受信する
※プロトコルUNITで使用
Parameters
- $p_cid : string
-
接続ID
- $p_recv : mixed
-
受信エリア
- $p_size : int = null
-
受信サイズ(指定があればデフォルトサイズより優先される)
Return values
int —受信したサイズ or false(失敗) or null(取得できるデータがない)
sending()
データ送信
public
sending(string $p_cid) : bool|null
setSendingDataで設定されたデータを送信するまで続ける
※プロトコルUNITで使用
Parameters
- $p_cid : string
-
接続ID
Return values
bool|null —true(成功) or false(失敗) or null(送信中)
setCommandUnits()
IEntryUnitsによるUNIT登録(コマンド用)
public
setCommandUnits(IEntryUnits $p_entry) : mixed
Parameters
- $p_entry : IEntryUnits
-
IEntryUnitsのインスタンス
setInitSocketManager()
IInitSocketManagerによる初期化
public
setInitSocketManager(IInitSocketManager $p_init) : mixed
Parameters
- $p_init : IInitSocketManager
-
IInitSocketManagerのインスタンス
setProperties()
プロパティの設定(ディスクリプタ内)
public
setProperties(string $p_cid, array<string|int, mixed> $p_prop) : bool
Parameters
- $p_cid : string
-
接続ID
- $p_prop : array<string|int, mixed>
-
プロパティのリスト
Return values
bool —true(成功) or false(失敗)
setProtocolUnits()
IEntryUnitsによるUNIT登録(プロトコル用)
public
setProtocolUnits(IEntryUnits $p_entry) : mixed
Parameters
- $p_entry : IEntryUnits
-
IEntryUnitsのインスタンス
setReceivingSize()
データ受信サイズの設定
public
setReceivingSize(string $p_cid, int $p_size) : bool
※プロトコルUNITで使用
Parameters
- $p_cid : string
-
接続ID
- $p_size : int
-
受信サイズ
Return values
bool —true(成功) or false(失敗)
setRecvStack()
受信データスタックへ設定
public
setRecvStack(string $p_cid[, mixed $p_data = null ][, bool $p_convert = false ]) : bool
※基本的に送受信スタック内のペイロードデータはシリアライズ化されている事を前提とする
Parameters
- $p_cid : string
-
接続ID
- $p_data : mixed = null
-
設定するデータ
- $p_convert : bool = false
-
― 変換(シリアライズ/アンシリアライズの行使)フラグ
― フラグ指定に関わらずシリアライザーが登録されていなければ変換はされない
Return values
bool —true(成功) or false(失敗)
setSendingData()
送信データの設定
public
setSendingData(string $p_cid, string $p_data) : bool
※プロトコルUNITで使用
Parameters
- $p_cid : string
-
接続ID
- $p_data : string
-
送信データ
Return values
bool —true(成功) or false(失敗)
setSendStack()
送信データスタックへ設定
public
setSendStack(string $p_cid, mixed $p_data) : bool
※基本的に送受信スタック内のペイロードデータはシリアライズ化されている事を前提とする
Parameters
- $p_cid : string
-
接続ID
- $p_data : mixed
-
送信データ
Return values
bool —true(成功) or false(失敗)
setSendStackAll()
全接続の送信データスタックへ設定
public
setSendStackAll(string $p_cid, mixed $p_data[, bool $p_self_remove = false ]) : bool
※基本的に送受信スタック内のペイロードデータはシリアライズ化されている事を前提とする
Parameters
- $p_cid : string
-
接続ID
- $p_data : mixed
-
送信データ
- $p_self_remove : bool = false
-
自身の接続の除外フラグ
Return values
bool —true(成功) or false(失敗)
setStatusName()
ステータス名の設定
public
setStatusName(string $p_kind, string $p_cid, string|null $p_name) : mixed
Parameters
- $p_kind : string
-
設定対象種別('protocol_names' or 'command_names')
- $p_cid : string
-
接続ID
- $p_name : string|null
-
キュー名 or null(なし)
setUserProperties()
ユーザープロパティの設定(ディスクリプタ内)
public
setUserProperties(string $p_cid, array<string|int, mixed> $p_prop) : bool
Parameters
- $p_cid : string
-
接続ID
- $p_prop : array<string|int, mixed>
-
ユーザープロパティのリスト
Return values
bool —true(成功) or false(失敗)
shutdown()
ソケットクローズ
public
shutdown(string $p_cid) : bool
Parameters
- $p_cid : string
-
接続ID
Return values
bool —true(成功) or false(失敗)
shutdownAll()
ソケット全クローズ
public
shutdownAll() : bool
Return values
bool —true(成功) or false(失敗)
throwBreak()
プロトコルUNIT処理を中断する
public
throwBreak() : mixed
実行されると例外キャッチ時に切断処理は無視されて処理を継続する
createDescriptor()
ソケットディスクリプタの生成
private
createDescriptor(Socket $p_socket[, bool $p_udp = false ]) : array<string|int, mixed>|bool
Parameters
- $p_socket : Socket
-
ソケットリソース
- $p_udp : bool = false
-
UDPフラグ
Return values
array<string|int, mixed>|bool —ディスクリプタ or false(失敗)
executeUnit()
UNITの実行
private
executeUnit(string $p_cid, string $p_kind) : bool
Parameters
- $p_cid : string
-
接続ID
- $p_kind : string
-
UNIT種別("protocol_names" or "command_names")
Return values
bool —true(成功) or false(切断)
getRecvStack()
受信データスタックから取得
private
getRecvStack(string $p_cid[, bool $p_convert = true ]) : mixed
※基本的に送受信スタック内のペイロードデータはシリアライズ化されている事を前提とする
Parameters
- $p_cid : string
-
接続ID
- $p_convert : bool = true
-
― 変換(シリアライズ/アンシリアライズの行使)フラグ
― フラグ指定に関わらずシリアライザーが登録されていなければ変換はされない
Return values
mixed —受信した最新のペイロードデータ or null(空) or false(失敗)
getSendStack()
送信データスタックから取得
private
getSendStack(string $p_cid[, bool $p_convert = false ]) : mixed
※基本的に送受信スタック内のペイロードデータはシリアライズ化されている事を前提とする
Parameters
- $p_cid : string
-
接続ID
- $p_convert : bool = false
-
― 変換(シリアライズ/アンシリアライズの行使)フラグ
― フラグ指定に関わらずシリアライザーが登録されていなければ変換はされない
Return values
mixed —送信データスタックエントリ or null(空) or false(失敗)
getSerializer()
シリアライザーの取得
private
getSerializer() : mixed
送信データ(ペイロード部)のシリアライズ処理
Return values
mixed —関数(あるいは関数名) or null(空)
isExecutingSequence()
UNIT実行中の検査
private
isExecutingSequence(string $p_kind, string $p_cid) : bool
Parameters
- $p_kind : string
-
調査対象種別('protocol_names' or 'command_names')
- $p_cid : string
-
接続ID
Return values
bool —true(実行中) or false(未実行)
select()
ソケットセレクト
private
select([int $p_utimer = 0 ]) : bool
Parameters
- $p_utimer : int = 0
-
ブロッキングタイム(マイクロ秒)
Return values
bool —true(成功) or false(失敗)
setQueueNameForStart()
キュー名の設定(処理開始用)
private
setQueueNameForStart(string $p_kind, string $p_cid, string|null $p_name) : bool
Parameters
- $p_kind : string
-
設定対象種別('protocol_names' or 'command_names')
- $p_cid : string
-
接続ID
- $p_name : string|null
-
キュー名 or null(なし)
Return values
bool —true(成功) or false (失敗)