WebSockets - Сервер работает
Сервер Web Socket - это простая программа, которая может обрабатывать события и действия Web Socket. Обычно он предоставляет аналогичные методы клиентскому API Web Socket, и большинство языков программирования предоставляют реализацию. На следующей диаграмме показан процесс связи между сервером веб-сокета и клиентом веб-сокета с акцентом на инициированные события и действия.
На следующей диаграмме показан запуск событий сервера и клиента Web Socket.
Подключение к веб-серверу
Сервер Web Socket работает аналогично клиентам Web Socket. Он реагирует на события и при необходимости выполняет действия. Независимо от используемого языка программирования, каждый сервер Web Socket выполняет определенные действия.
Он инициализируется адресом веб-сокета. Он обрабатываетOnOpen, OnClose, и OnMessage событиях, а также отправляет сообщения клиентам.
Создание экземпляра сервера веб-сокетов
Каждому серверу Web Socket нужен действующий хост и порт. Пример создания экземпляра веб-сокета на сервере выглядит следующим образом:
var server = new WebSocketServer("ws://localhost:8181");
Можно использовать любой допустимый URL с указанием порта, который ранее не использовался. Очень полезно вести учет подключенных клиентов, поскольку он предоставляет подробную информацию с разными данными или отправляет разные сообщения каждому из них.
Fleck представляет входящие соединения (клиентов) с 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 (), клиенты могут сохранять текстовые или двоичные данные.
Работа 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);
}
};