推荐的类似telnet的服务器架构(多进程?进程池?)

时间:2013-12-30 20:40:34

标签: python python-3.x network-programming

我正在为类似telnet的协议编写Python服务器。客户端连接并验证会话,然后发出一系列命令,每个命令都有一个响应。会话具有状态,在某种意义上用户进行一次身份验证,然后假定后续命令由该用户执行。不同会话中的命令/响应操作实际上是独立的,尽管它们确实涉及读取和偶尔写入共享IO资源(postgres),这些资源主要能够管理自己的并发。

设计目标是支持拥有少量8或16核服务器的大量用户。我正在寻找一种合理有效的方法来构建服务器实现。

我考虑过的一些选项包括:

  • 为每个会话使用线程;我怀疑使用GIL会导致可用内核使用不足
  • 为每个会话使用多个进程;我怀疑,与服务器的会话比例很高(比如1000比1),1000 python解释器的开销可能会超出内存限制。当用户连接时,您也会遇到“慢启动”问题。
  • 将会话分配给32个左右的进程池;空闲会话可能会分配给所有32个进程,并阻止处理非空闲会话。
  • 使用某种类型的“路由”系统,其中所有会话由单个进程处理,然后将各个命令导出到进程池。这对我来说仍然听起来基本上是单线程的(因为存在一个很大的单线程瓶颈),如果某些命令非常简单,但必须跨越IPC边界两次并等待一个自由进程才能获得响应。
  • 使用Jython / IronPython和多线程;缺乏C扩展是一个问题
  • Python不适合这个问题;使用Go / C ++ / Scala / Java作为Python进程的路由器或完全放弃Python。

0 个答案:

没有答案