Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Merekabentuk Pelayan TCP/IP Boleh Skala dengan Sambungan Berpanjangan?
Corak Reka Bentuk Pelayan TCP/IP Berskala
Apabila mereka bentuk pelayan TCP/IP berskala yang memerlukan sambungan jangka panjang, adalah penting untuk dipertimbangkan seni bina rangkaian yang paling cekap. Soket tak segerak ialah pendekatan yang disyorkan kerana keupayaannya untuk mengendalikan berbilang pelanggan secara serentak tanpa menggunakan sumber yang berlebihan.
Seni Bina Rangkaian
Pelayan :
Pelanggan:
Aliran Data
Kod Contoh
using System; using System.Net; using System.Net.Sockets; namespace TcpServer { class xConnection { public byte[] buffer; public System.Net.Sockets.Socket socket; } class Server { private List<xConnection> _sockets; private System.Net.Sockets.Socket _serverSocket; private int _port; private int _backlog; public bool Start() { IPHostEntry localhost = Dns.GetHostEntry(Dns.GetHostName()); IPEndPoint serverEndPoint = new IPEndPoint(localhost.AddressList[0], _port); try { _serverSocket = new Socket(serverEndPoint.Address.AddressFamily, SocketType.Stream, ProtocolType.Tcp); _serverSocket.Bind(serverEndPoint); _serverSocket.Listen(_backlog); _serverSocket.BeginAccept(new AsyncCallback(AcceptCallback), _serverSocket); return true; } catch (Exception e) { // Handle exceptions appropriately return false; } } private void AcceptCallback(IAsyncResult result) { try { Socket serverSocket = (Socket)result.AsyncState; xConnection conn = new xConnection(); conn.socket = serverSocket.EndAccept(result); conn.buffer = new byte[_bufferSize]; lock (_sockets) { _sockets.Add(conn); } conn.socket.BeginReceive(conn.buffer, 0, conn.buffer.Length, SocketFlags.None, new AsyncCallback(ReceiveCallback), conn); _serverSocket.BeginAccept(new AsyncCallback(AcceptCallback), _serverSocket); } catch (Exception e) { // Handle exceptions appropriately } } private void Send(byte[] message, xConnection conn) { if (conn != null && conn.socket.Connected) { lock (conn.socket) { conn.socket.Send(message, message.Length, SocketFlags.None); } } } } }
Tambahan Pertimbangan
Atas ialah kandungan terperinci Bagaimana untuk Merekabentuk Pelayan TCP/IP Boleh Skala dengan Sambungan Berpanjangan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!