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

时间:2013-12-27 11:57:47

标签: python multithreading sockets

我想创建一个类,允许在同一个端口上发送和接收,并在程序执行操作时从传入消息创建事件驱动的应用程序。我对插座没什么经验,所以我不知道怎么做。这是我的SimpleSock类,到目前为止只是绑定套接字。我还在那里设置了一个无限循环来监听连接,但是知道这对我想要的东西不起作用,因为除了listen之外,程序将无法做任何事情。

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

如何在没有无限循环的情况下编写监听?我需要使用线程吗?

1 个答案:

答案 0 :(得分:0)

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

一般的想法是,框架将允许您注册事件发生时的回调,如数据在套接字上等待,并且框架通常是您的“主循环”(因此它通常接管主线程的控制)。您大多数时间不需要线程 - 只要所有事件源都可以使用select()或类似的方式进行等待,所有内容都可以在一个线程中进行多路复用。