gpt4 book ai didi

python - ornado.websocket 和 [Errno 24] 打开文件太多

转载 作者:行者123 更新时间:2023-11-30 23:20:52 24 4
gpt4 key购买 nike

我在本地计算机上测试tornado.websocket时遇到错误([Errno 24]打开文件太多)。

server.py

import tornado.ioloop
import tornado.web
import tornado.websocket
import tornado.options


class ChatSocketHandler(tornado.websocket.WebSocketHandler):
waiters = set()

def open(self):
ChatSocketHandler.waiters.add(self)
print "Clients: ", len(ChatSocketHandler.waiters)

def on_close(self):
ChatSocketHandler.waiters.remove(self)

@classmethod
def send_updates(cls, chat):
for waiter in cls.waiters:
try:
waiter.write_message(chat)
except:
logging.error("Error sending message", exc_info=True)

def on_message(self, message):
ChatSocketHandler.send_updates(message)

app = tornado.web.Application([
(r"/ws", ChatSocketHandler)
])

def main():
tornado.options.parse_command_line()
app.listen(8888)
tornado.ioloop.IOLoop.instance().start()

if __name__ == "__main__":
main()

clients.py(使用 websocket-client )

from multiprocessing import Pool, Process
from websocket import create_connection

def go():
ws = create_connection("ws://127.0.0.1:8888/ws")

while True:
try:
ws.send("Message ...")
result = ws.recv()
print "Received '%s'" % result
except KeyboardInterrupt:
break
ws.close()


for i in range(1000):
Process(target=go).start()

服务器在大约 800 个连接后终止;/

附加问题:可以为tornado服务器实例设置Nginx代理吗?我能得到一些好处吗?

最佳答案

您的进程可能用完文件描述符。 Here是 Linux 上网络调整的秘诀,包括如何增加 max。 FD。 (这适用于 Crossbar.io ,但也适用于 Tornado)。

关于你的问题“将 Nginx 放在 Tornado 前面是否有意义”:是的,当然。 Tornado 的 native TLS 支持是有限的。看看Hynek Schlawack: The Sorry State of SSL - PyCon 2014

注意:后者不适用于 Twisted(或基于 Twisted 的 Crossbar.io) - 因为 Twisted 使用 pyOpenSSL 并且可以具有高质量的 TLS。因此 Nginx 不需要这些(至少不是出于 TLS 的原因)。

关于python - ornado.websocket 和 [Errno 24] 打开文件太多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25200119/

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