WebSocket-サーバーの動作
Web Socketサーバーは単純なプログラムであり、WebSocketのイベントとアクションを処理する機能があります。通常、同様のメソッドをWeb SocketクライアントAPIに公開し、ほとんどのプログラミング言語が実装を提供します。次の図は、WebSocketサーバーとWebSocketクライアント間の通信プロセスを示しており、トリガーされたイベントとアクションを強調しています。
次の図は、WebSocketサーバーとクライアントイベントのトリガーを示しています-
Webサーバーへの接続
Web Socketサーバーは、WebSocketクライアントと同じように機能します。イベントに応答し、必要に応じてアクションを実行します。使用するプログラミング言語に関係なく、すべてのWebSocketサーバーは特定のアクションを実行します。
WebSocketアドレスに初期化されます。それは処理しますOnOpen, OnClose, そして OnMessage イベント、およびクライアントにもメッセージを送信します。
Webソケットサーバーインスタンスの作成
すべてのWebSocketサーバーには、有効なホストとポートが必要です。サーバーでWebSocketインスタンスを作成する例は次のとおりです。
var server = new WebSocketServer("ws://localhost:8181");
以前は使用されていなかったポートを指定して、有効なURLを使用できます。接続されたクライアントの記録を保持すると、さまざまなデータの詳細が提供されたり、各クライアントにさまざまなメッセージが送信されたりするため、非常に便利です。
フレックは、着信接続(クライアント)を表します IwebSocketConnectionインターフェース。誰かが私たちのサービスに接続または切断するときはいつでも、空のリストを作成または更新することができます。
var clients = new List<IWebSocketConnection>();
その後、私たちは呼び出すことができます Startメソッドを実行し、クライアントが接続するのを待ちます。起動後、サーバーは着信接続を受け入れることができます。Fleckでは、Startメソッドには、イベントを発生させたソケットを示すパラメーターが必要です-
server.Start(socket) =>
{
});
OnOpenイベント
ザ・ OnOpenイベントは、新しいクライアントがアクセスを要求したことを判別し、最初のハンドシェイクを実行します。クライアントをリストに追加し、おそらくIPアドレスなどのクライアントに関連する情報を保存する必要があります。Fleckは、そのような情報と、接続の一意の識別子を提供します。
server.Start(socket) ⇒ {
socket.OnOpen = () ⇒ {
// Add the incoming connection to our list.
clients.Add(socket);
}
// Handle the other events here...
});
OnCloseイベント
ザ・ OnCloseクライアントが切断されるたびにイベントが発生します。クライアントはリストから削除され、残りのクライアントに切断について通知します。
socket.OnClose = () ⇒ {
// Remove the disconnected client from the list.
clients.Remove(socket);
};
OnMessageイベント
ザ・ OnMessageクライアントがサーバーにデータを送信すると、イベントが発生します。このイベントハンドラー内で、着信メッセージをクライアントに送信することも、クライアントの一部のみを選択することもできます。
プロセスは簡単です。このハンドラーは、という名前の文字列を受け取ることに注意してくださいmessage パラメータとして-
socket.OnMessage = () ⇒ {
// Display the message on the console.
Console.WriteLine(message);
};
Send()メソッド
ザ・ Send()メソッドは、指定されたクライアントに目的のメッセージを送信するだけです。Send()を使用すると、テキストまたはバイナリデータをクライアント間で保存できます。
の働き OnMessage イベントは以下の通りです−
socket.OnMessage = () ⇒ {
foreach (var client in clients) {
// Send the message to everyone!
// Also, send the client connection's unique identifier in order
// to recognize who is who.
client.Send(client.ConnectionInfo.Id + " says: " + message);
}
};