首页 文章

套接字包转发

提问于
浏览
1

我正在寻找一种位于服务器和客户端之间的网关 . 所谓的网关应该过滤客户端发送的一些数据包并转发99%的数据包 .

这是我的问题:

  • 客户端打开到网关的新套接字,我从网关打开到服务器的套接字并将其存储在列表中以供进一步使用 . 但是,在一种情况下,所有连接都将来自相同的IP,因此在选择应将数据包转发到服务器的套接字时,我的选择有限 . 如何区分打开的插座?

  • 从以前的情况来看,我预计大约有500个客户端每秒发送一个数据包 . 性能方面,我应该使用多线程模型,还是坚持使用单线程应用程序?

  • 还是一个性能问题:我必须在C#和Python之间做出选择 . 哪一个应该提供更好的表现?

1 回答

  • 1

    套接字地址是主机和端口,而不仅仅是主机 . 来自同一主机的不同连接将始终具有不同的端口 . (我假设TCP,而不是UDP,这里 . )

    或者,更简单地说,您可以比较文件描述符(或者,在Python中,套接字对象本身)而不是它们的对等地址 .

    同时,对于性能而言,在大多数平台上,500接近你可以用线程做的限制,但还没有达到极限,所以你可以这样做 . 但我认为使用单线程反应器或带有小线程池的前驱器会更好 . 特别是如果你可以使用像扭曲或gevents这样的预先存在的框架来为你做困难的部分 .

    至于语言,只是转发或过滤数据包,套接字多路复用的性能将是最重要的,因此使用Python没有问题 . 从任一语言中选择您喜欢的框架,并使用该语言 .

    最后一些评论:您确实意识到TCP数据包不会与更高级别协议中的消息匹配,对吧?此外,将Linux或BSD盒设置为路由器,这样做可能会更容易,而且效率更高,因此您不必编写除过滤器之外的任何内容 .

相关问题