gpt4 book ai didi

Python 可扩展聊天服务器

转载 作者:太空狗 更新时间:2023-10-29 20:19:13 26 4
gpt4 key购买 nike

我刚刚开始使用 Python 学习套接字。所以我写了一些聊天服务器和客户端的例子。我在互联网上看到的大部分内容似乎都使用线程模块来(异步)处理客户端与服务器的连接。我确实明白,对于可扩展的服务器,您需要使用一些额外的技巧,因为数千个线程可能会杀死服务器(如果我错了请纠正我,但这是由于 GIL 造成的吗?),但这不是我目前关心的问题.

奇怪的是,我在 Python 文档的某处发现创建子进程是正确的方法(不幸的是我丢失了引用,抱歉 :( ) 用于处理套接字。

所以问题是:使用线程还是多处理?或者有更好的解决方案吗?

请给我答案并向我解释不同之处。

顺便说一句:我确实知道有像 Twisted 这样写得很好的东西。我不是在寻找一个预制的可扩展服务器,而是试图了解如何编写一个可以扩展或至少处理 10k 客户端的服务器。

编辑:操作系统是 Linux。

最佳答案

Facebook 需要一个可扩展的服务器,所以他们写了 Tornado (使用异步)。 Twisted也是著名的可扩展性(它也使用异步)。 Gunicorn也是表现最好的(它使用多个进程)。我所知道的快速、可扩展的工具都没有使用线程。

尝试不同方法的一个简单方法是从标准库中的 SocketServer 模块开始:http://docs.python.org/library/socketserver.html .它允许您通过交替继承 ThreadingMixin 或 ForkingMixin 来轻松切换方法。

此外,如果您有兴趣了解异步方法,加深理解的最简单方法是阅读一篇讨论 Tornado 实现的博客文章:http://golubenco.org/2009/09/19/understanding-the-code-inside-tornado-the-asynchronous-web-server-powering-friendfeed/

祝你好运,计算愉快:-)

关于Python 可扩展聊天服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7847089/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com