没有无限循环的Python服务器套接字?

2024-05-14 09:36:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我想创建一个类,该类允许在同一端口上发送和接收,并在程序执行操作时从传入消息创建一个事件驱动的应用程序。我对插座没有太多的经验,所以我不知道怎么做。这是我的SimpleLock类,到目前为止它只绑定了套接字。我也在里面放了一个无限循环来监听连接,但是我知道这不会起作用,因为程序除了监听之外什么都做不了。在

import socket

class SimpleSock:

    def __init__(self, ip=None, port=None):
        if ip == None or port == None:
            print("SimpleSock cannot init without an ip and port")
        else:
            self.ip = ip
            self.port = port
            self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

            print("attempting connection to " + self.ip + " on port " + str(self.port))

            self.socket.bind((self.ip, self.port))
            self.socket.listen(5)

            print("connected")

            while True:
                (clientsocket, address) = self.socket.accept()
                #do something

如何编写一个没有无限循环的listen?我需要使用线程吗?在


Tags: 端口selfipnone应用程序消息initport
1条回答
网友
1楼 · 发布于 2024-05-14 09:36:31

可以使用Python Twisted或Tornado等框架来构建Python中的事件驱动网络应用程序。您可以在另一个问题中看到比较:When to use Tornado, when to use Twisted / Cyclone / GEvent / other

总的想法是,框架将允许您在事件发生时注册回调,比如等待套接字的数据,并且框架通常是您的“主循环”(因此它通常接管主线程的控制权)。大多数情况下,只要所有的事件源都可以使用select()或类似的方法等待,那么在一个线程中就不需要线程了。在

相关问题 更多 >

    热门问题