套接字包转发

时间:2013-10-19 20:28:31

标签: c# python sockets

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

以下是我的问题:

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

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

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

1 个答案:

答案 0 :(得分:1)

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

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

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

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

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

相关问题