WebSockets - Máy chủ hoạt động
Máy chủ Web Socket là một chương trình đơn giản, có khả năng xử lý các sự kiện và hành động của Web Socket. Nó thường đưa ra các phương pháp tương tự như API ứng dụng khách Web Socket và hầu hết các ngôn ngữ lập trình đều cung cấp cách triển khai. Sơ đồ sau minh họa quy trình giao tiếp giữa máy chủ Web Socket và máy khách Web Socket, nhấn mạnh các sự kiện và hành động được kích hoạt.
Sơ đồ sau cho thấy một máy chủ Web Socket và sự kiện máy khách đang kích hoạt:
Kết nối với Máy chủ Web
Máy chủ Web Socket hoạt động theo cách tương tự như các máy khách Web Socket. Nó phản hồi các sự kiện và thực hiện các hành động khi cần thiết. Bất kể ngôn ngữ lập trình nào được sử dụng, mọi máy chủ Web Socket đều thực hiện một số hành động cụ thể.
Nó được khởi tạo thành địa chỉ Web Socket. Nó xử lýOnOpen, OnClose, và OnMessage sự kiện và gửi tin nhắn cho khách hàng.
Tạo phiên bản máy chủ ổ cắm web
Mỗi máy chủ Web Socket cần một máy chủ lưu trữ và cổng hợp lệ. Ví dụ về việc tạo một phiên bản Web Socket trong máy chủ như sau:
var server = new WebSocketServer("ws://localhost:8181");
Bất kỳ URL hợp lệ nào cũng có thể được sử dụng với đặc điểm kỹ thuật của một cổng chưa được sử dụng trước đó. Nó rất hữu ích để lưu giữ hồ sơ về các máy khách được kết nối, vì nó cung cấp thông tin chi tiết với các dữ liệu khác nhau hoặc gửi các thông điệp khác nhau cho từng máy khách.
Fleck đại diện cho các kết nối đến (máy khách) với IwebSocketConnectiongiao diện. Bất cứ khi nào ai đó kết nối hoặc ngắt kết nối khỏi dịch vụ của chúng tôi, danh sách trống có thể được tạo hoặc cập nhật.
var clients = new List<IWebSocketConnection>();
Sau đó, chúng ta có thể gọi Startvà đợi các máy khách kết nối. Sau khi khởi động, máy chủ có thể chấp nhận các kết nối đến. Trong Fleck, phương thức Start cần một tham số, cho biết ổ cắm đã tăng các sự kiện -
server.Start(socket) =>
{
});
Sự kiện OnOpen
Các OnOpensự kiện xác định rằng một khách hàng mới đã yêu cầu quyền truy cập và thực hiện bắt tay ban đầu. Máy khách nên được thêm vào danh sách và có lẽ thông tin sẽ được lưu trữ liên quan đến nó, chẳng hạn như địa chỉ IP. Fleck cung cấp cho chúng tôi những thông tin đó, cũng như một số nhận dạng duy nhất cho kết nối.
server.Start(socket) ⇒ {
socket.OnOpen = () ⇒ {
// Add the incoming connection to our list.
clients.Add(socket);
}
// Handle the other events here...
});
Sự kiện OnClose
Các OnClosesự kiện được đưa ra bất cứ khi nào máy khách bị ngắt kết nối. Khách hàng bị xóa khỏi danh sách và thông báo cho các khách hàng còn lại về việc ngắt kết nối.
socket.OnClose = () ⇒ {
// Remove the disconnected client from the list.
clients.Remove(socket);
};
Sự kiện OnMessage
Các OnMessagesự kiện được đưa ra khi một máy khách gửi dữ liệu đến máy chủ. Bên trong trình xử lý sự kiện này, thông điệp đến có thể được truyền đến các máy khách hoặc có thể chỉ chọn một số trong số chúng.
Quá trình này rất đơn giản. Lưu ý rằng trình xử lý này nhận một chuỗi có tênmessage như một tham số -
socket.OnMessage = () ⇒ {
// Display the message on the console.
Console.WriteLine(message);
};
Gửi () Phương thức
Các Send()phương thức chỉ đơn giản là truyền thông điệp mong muốn đến máy khách được chỉ định. Sử dụng Send (), dữ liệu văn bản hoặc nhị phân có thể được lưu trữ trên các máy khách.
Công việc của OnMessage sự kiện như sau -
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);
}
};