我想创建一个类,允许在同一个端口上发送和接收,并在程序执行操作时从传入消息创建事件驱动的应用程序。我对插座没什么经验,所以我不知道怎么做。这是我的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
如何在没有无限循环的情况下编写监听?我需要使用线程吗?
答案 0 :(得分:0)
Python中的事件驱动的网络应用程序可以使用Python Twisted或Tornado等框架构建。您可以在此处查看另一个问题的比较:When to use Tornado, when to use Twisted / Cyclone / GEvent / other
一般的想法是,框架将允许您注册事件发生时的回调,如数据在套接字上等待,并且框架通常是您的“主循环”(因此它通常接管主线程的控制)。您大多数时间不需要线程 - 只要所有事件源都可以使用select()或类似的方式进行等待,所有内容都可以在一个线程中进行多路复用。