【发布时间】:2016-06-23 12:56:32
【问题描述】:
假设我们有一个用 Python 编写的服务器应用程序。
假设这个主服务器进程在启动时又分叉了两个进程。
服务器等待它的客户端,当客户端到来时决定两个分叉进程中的哪一个应该通过客户端的套接字。
我不想在每次客户到来时都派生一个进程;我想拥有固定数量的服务器,但一个主服务器接收连接,然后将其传递给处理特定工作客户端请求的服务器。
这应该是DOS攻击防护、作业分离等等等等。
在启动的 Python 程序之间传递 Python 对象有什么技巧吗?
一些共享内存或类似的东西?
酸洗套接字对象并通过 IPC 推送它会起作用吗?
【问题讨论】:
-
我认为您不能(或不应该)序列化诸如套接字之类的东西。为什么不使用同步/事件架构?
-
就是这样。序列化它应该不是问题等等。但是套接字对象是一半 C 一半 Python,所以在这个过程中可能会发生任何事情,这肯定是不稳定的。
-
@Dalen,我不知道这样做是否正确,但我能够通过以下 sn-ps 共享任意对象(甚至是远程): stackoverflow.com 不过,我对安全性/稳定性/性能一无所知。在你的情况下(使用套接字)我不会尝试将它们变成远程共享对象,但你可以从链接并将其应用到其他地方,也许。
-
@krysopath :谢谢,但我以前做过这样的事情,甚至更疯狂。远程共享套接字是不可能的。如果您想将连接转发到另一台 PC,有很多方法,但防火墙反对真正的切换,而且它复杂到无用的地步。 IE。告诉客户端重定向到另一个 IP 很容易。
-
@Dalen 是的,确实:远程共享套接字正在破坏套接字的目的 :) 我只是认为这种在进程之间共享对象的方法可以帮助您进行工作分离等。我能够滥用 sn-p 来实现在 localhost 上运行的“信息代理”,它被另一个 localhost 进程询问,但只回答有效请求。它可能达不到你的目的。