我想检查一个端口是否是常用端口,并且能获取到该端口对应的协议名称。看了一些文档,好像phf能满足需求,不知道有没有其他更简单有效的做法。
static KNOWN_PORTS: phf::Map<&'static str, &'static str> = phf_map! {
"21"=> "ftp",
"22"=> "SSH",
"23"=> "telnet",
"25"=> "SMTP",
"66"=> "Oracle SQL*NET?",
"69"=> "tftp",
"80"=> "http",
"88"=> "kerberos",
"109"=> "pop2",
"110"=> "pop3",
"123"=> "ntp",
"137"=> "netbios",
// ....
}
1
共 7 条评论, 1 页
评论区
写评论不如写到配置文件里,方便扩展
这样的话, 其实直接写成match语句是不是性能就不错, 我觉得编译器会优化的很好的, 这样写起码无依赖不会增加编译负担, 可读性也挺好
--
👇
terrysco: 本来是想用端口号的u16,但phf只有字符串
--
👇
songzhi: 既然是端口号,为啥要用字符串...标准库里用的也是数字呀,可以把键名换成数字类型的
本来是想用端口号的u16,但phf只有字符串
--
👇
songzhi: 既然是端口号,为啥要用字符串...标准库里用的也是数字呀,可以把键名换成数字类型的
既然是端口号,为啥要用字符串...标准库里用的也是数字呀,可以把键名换成数字类型的
你这个已经很简洁了... 我自己做的, lazy_static一个字典, 一条条插入..
我是问这种做法的rust最佳实践,不是追求性能的优化
--
👇
gwy15: 这构不成什么瓶颈吧,没啥好优化的啊……
实在要优化,端口一共就 65535,而且系统端口就 0~1023,直接开个
Vec<'static str>
会快一点。但是没啥必要在这种地方抠细节,省不了多少吧。这构不成什么瓶颈吧,没啥好优化的啊……
实在要优化,端口一共就 65535,而且系统端口就 0~1023,直接开个
Vec<'static str>
会快一点。但是没啥必要在这种地方抠细节,省不了多少吧。