UDP サーバー
最終更新
役に立ちましたか?
最終更新
役に立ちましたか?
UDP サーバーは、Diarkis の3つのリアルタイム・コミュニケーション・サーバーのうちの1つです。
クライアントにあらかじめ用意されたモジュールのビルトイン・コマンドの公開や、カスタム・コマンドを実装して公開することができます。
コマンドとは、クライアントから送信され、サーバーで処理されるフォーマットされたパケットのことです。コマンドを利用し、Diarkis のサーバー・クラスターがクライアントと対話します。
クライアントにビルトイン・コマンドを公開するには、diarkisexec パッケージを利用してセットアップできます。
diarkisexec.SetupDiarkis()
でモジュールを指定してビルトイン・コマンドを公開できます。各モジュールの ConfigPath
を指定することで、設定をカスタマイズできます。
diarkisexec.SetServerCommandHandler()
でカスタム・コマンドを公開できます。
diarkisexec.SetupDiarkisUDPServer()
で UDP サーバーのセットアップができます。引数の JSON ファイルでサーバーの設定をカスタマイズできます。
上記の関数は、
diarkisexec.StartDiarkis()
を呼ぶ前に実行する必要があります。
詳細は diarkisexec の API リファレンスを参照して下さい。
package main
import (
"github.com/Diarkis/diarkis/diarkisexec"
"github.com/Diarkis/diarkis/server"
"github.com/Diarkis/diarkis/user"
)
var ver uint8 = 10
var cmd uint16 = 100
func main() {
logConfigPath := "/configs/shared/log.json"
meshConfigPath := "/configs/shared/mesh.json"
diarkisexec.SetupDiarkis(logConfigPath, meshConfigPath, &diarkisexec.Modules{
Room: &diarkisexec.Options{ExposeCommands: true},
P2P: &diarkisexec.Options{ExposeCommands: true},
Group: &diarkisexec.Options{ConfigPath: "/configs/shared/group.json", ExposeCommands: true},
Dive: &diarkisexec.Options{ConfigPath: "/configs/shared/dive.json", ExposeCommands: true},
Field: &diarkisexec.Options{ConfigPath: "/configs/shared/field.json", ExposeCommands: true},
DM: &diarkisexec.Options{ConfigPath: "/configs/shared/dm.json", ExposeCommands: true},
MatchMaker: &diarkisexec.Options{ConfigPath: "/configs/shared/matching.json", ExposeCommands: true},
Session: &diarkisexec.Options{ConfigPath: "/configs/shared/session.json", ExposeCommands: true},
})
diarkisexec.SetupDiarkisUDPServer("/configs/udp/main.json")
diarkisexec.SetServerCommandHandler(ver, cmd, helloWorld)
diarkisexec.StartDiarkis()
}
func helloWorld(ver uint8, cmd uint16, payload []byte, userData *user.User, next func(error)) {
userData.ServerRespond([]byte("Hello World"), ver, cmd, server.Ok, true)
next(nil)
}
meshConfigPath には JSON ファイルのパスを指定します。詳細は Mesh 設定 を参照してください。
設定は JSON で記述します。
{
"enableP2P": true,
"address": "127.0.0.1",
"nic": "eth0",
"port": "7000",
"connectionTTL": 10,
"sendUDPInterval": 0,
"handleRUDPInterval": 100,
"rcvWorkers": 1,
"retryInterval": 1000,
"maxRetry": 10,
"enableEncryption": true
}
enableP2P
true
true に設定すると、クライアントはP2P用に自分のパブリック・アドレスを取得することができます。
address
"127.0.0.1"
バインドする UDP サーバーのアドレス
nic
"eth0"
アドレスを取得するインターフェース名。アドレスが未指定の場合に利用します。
port
"7100"
UDP サーバーがバインドするためのポート。UDP サーバーは、指定されたポートから始まる利用可能なポートを自動的に探します。
connectionTTL
10
接続の TTL。この時間を超えるとクライアントはサーバーから切断されます。
sendUDPInterval
0
UDP パケットの送信間隔(ミリ秒)。10より小さく設定すると、送信パケットはバッファリングされません。
handleRUDPInterval
100 min: 10
RUDP パケットの送受信間隔(ミリ秒)。 値が小さいほど、サーバーはより敏感に(高速に)応答するようになりますが、その代償として CPU 負荷が増加します。
retryInterval
1000
RUDP パケットの再試行間隔(ミリ秒)
maxRetry
10
RUDP パケットの最大再試行回数。この値を超えた場合、RUDP 接続はタイムアウトとみなされ破棄されます。
rcvWorkers
CPUコア数
UDP パケットを受信する goroutine の数
enableEncryption
true
falseに設定すると、パケットの暗号化と復号化が無効になります。HTTP サーバーも同様の設定をする必要があります。
詳細は server の API リファレンスを参照して下さい。
クラウド環境では、address はプライベート IP アドレスとし、環境変数 DIARKIS_CLOUD_ENV
を併用してください。