Python 异步与 UDP
Python asyncore with UDP
我可以在 asyncore 中编写 UDP client/server 应用程序吗?我已经使用 TCP 编写了一个。我的愿望是将它与对 UDP 的支持集成在一起。
我的问题之前 asked/answered 不是以下问题:
Python asyncore UDP server
经过长时间的搜索,答案是否。 Asyncore 假定底层套接字是 connection-oriented,即 TCP。
是的,你可以。这是一个简单的例子:
class AsyncoreSocketUDP(asyncore.dispatcher):
def __init__(self, port=0):
asyncore.dispatcher.__init__(self)
self.create_socket(socket.AF_INET, socket.SOCK_DGRAM)
self.bind(('', port))
# This is called every time there is something to read
def handle_read(self):
data, addr = self.recvfrom(2048)
# ... do something here, eg self.sendto(data, (addr, port))
def writable(self):
return False # don't want write notifies
这应该足以让您入门。查看 asyncore
模块以获得更多想法。
小注:asyncore.dispatcher
将套接字设置为非阻塞。如果
你想快速写入大量数据到套接字而不引起
错误你必须做一些依赖于应用程序的缓冲
ala asyncore.dispatcher_with_send
.
感谢这里的(稍微不准确的)代码让我开始:
https://www.panda3d.org/forums/viewtopic.php?t=9364
您好,感谢 @bw1024 指出了正确的方向,我将根据您的 pandas 和 python asyncore 文档添加我的解决方案。
我的用例是从 UDP 流
中捕获一些 JSON
`
导入套接字
导入 json
导入异步
UDP_IP = '127.0.0.1'
UDP_PORT = 2000
class AsyncUDPClient(asyncore.dispatcher):
def init(self, host, port):
asyncore.dispatcher.初始化(self)
self.create_socket(socket.AF_INET, socket.SOCK_DGRAM)
self.bind((主机, 端口))
print("connecting.. host = '{0}'' port = '{1}'" .format(host, str(port)))
def handle_connect(self):
print("connected")
def handle_read(self):
data = self.recv(1024)
y = json.loads(data)
print("PM 2.5 ug/m^3 async : %s "% y['PM25MassPerM3'])
def writable(self):
return False;
client = AsyncUDPClient(UDP_IP, UDP_PORT)
asyncore.loop()
`
P.S 不确定为什么代码在 python 上的 运行 格式不正确 3.6.9 OK 这是 link 要点
我可以在 asyncore 中编写 UDP client/server 应用程序吗?我已经使用 TCP 编写了一个。我的愿望是将它与对 UDP 的支持集成在一起。
我的问题之前 asked/answered 不是以下问题: Python asyncore UDP server
经过长时间的搜索,答案是否。 Asyncore 假定底层套接字是 connection-oriented,即 TCP。
是的,你可以。这是一个简单的例子:
class AsyncoreSocketUDP(asyncore.dispatcher):
def __init__(self, port=0):
asyncore.dispatcher.__init__(self)
self.create_socket(socket.AF_INET, socket.SOCK_DGRAM)
self.bind(('', port))
# This is called every time there is something to read
def handle_read(self):
data, addr = self.recvfrom(2048)
# ... do something here, eg self.sendto(data, (addr, port))
def writable(self):
return False # don't want write notifies
这应该足以让您入门。查看 asyncore
模块以获得更多想法。
小注:asyncore.dispatcher
将套接字设置为非阻塞。如果
你想快速写入大量数据到套接字而不引起
错误你必须做一些依赖于应用程序的缓冲
ala asyncore.dispatcher_with_send
.
感谢这里的(稍微不准确的)代码让我开始: https://www.panda3d.org/forums/viewtopic.php?t=9364
您好,感谢 @bw1024 指出了正确的方向,我将根据您的 pandas 和 python asyncore 文档添加我的解决方案。
我的用例是从 UDP 流
中捕获一些 JSON`
导入套接字 导入 json 导入异步
UDP_IP = '127.0.0.1' UDP_PORT = 2000
class AsyncUDPClient(asyncore.dispatcher): def init(self, host, port): asyncore.dispatcher.初始化(self) self.create_socket(socket.AF_INET, socket.SOCK_DGRAM) self.bind((主机, 端口)) print("connecting.. host = '{0}'' port = '{1}'" .format(host, str(port)))
def handle_connect(self):
print("connected")
def handle_read(self):
data = self.recv(1024)
y = json.loads(data)
print("PM 2.5 ug/m^3 async : %s "% y['PM25MassPerM3'])
def writable(self):
return False;
client = AsyncUDPClient(UDP_IP, UDP_PORT)
asyncore.loop()
`
P.S 不确定为什么代码在 python 上的 运行 格式不正确 3.6.9 OK 这是 link 要点