私は現在UDPサーバーで作業しています。IPアドレスとポートを使用して、接続されているクライアントにすべての着信パケットをリダイレクトしたいと思います。私の現在のやり方は次のようになります。
class Connection;
typedef std::map<unsigned short, Connection*> PortMap;
typedef std::map<unsigned int, PortMap> AddressMap;
だから私は基本的に2つのマップを使用しています。2つ目は、ipv4アドレス(unsigned int)をキーとして使用するすべてのポートのマップを含みます。PortMapはポートをキーとして使用し、Connectionクラス(クライアント)へのポインターを含みます。
ランダムに生成されたIPとポートを使用して64のクライアントにアクセスすることで速度テストを行い、64の異なるクライアントに64回アクセスするのに〜(編集:0.4ミリ秒)かかりました。遅いかどうかはよくわかりません。もちろん、それは私がテストを実行しているシステムに依存します。
アドレスを使用してクライアントにアクセスする方法は次のとおりです。
Client * GetClient(Address address)
{
AddressMap::iterator ipIt;
PortMap::iterator portIt;
unsigned int ip = address.GetAddress();
unsigned short port = address.GetPort();
/// Does the ip exist?
if((ipIt = clientAddresses.find(ip)) == clientAddresses.end())
{
return NULL;
}
/// Does the port exist?
if(clientAddresses[ip].find(port) == clientAddresses[ip].end())
{
return NULL;
}
return clientAddresses[ip][port];
}
誰かがそれを行う別のより速い方法を知っていますか?