【发布时间】:2018-02-10 08:35:45
【问题描述】:
想想我有一个游戏,我正在为每个连接创建客户端类。客户端类存储用户偏好(如所选国家/地区)。并且当用户与游戏类断开连接时删除。我需要做这样的事情。我的代码:
import asyncio
import logging
import sys
SERVER_ADDRESS = ('localhost', 56346)
logging.basicConfig(
level=logging.DEBUG,
format='%(name)s: %(message)s',
stream=sys.stderr,
)
log = logging.getLogger('main')
event_loop = asyncio.get_event_loop()
class Client():
def __init__(this):
this.something = ''
class Server(asyncio.Protocol):
def connection_made(self, transport):
self.transport = transport
self.address = transport.get_extra_info('peername')
self.log = logging.getLogger(
'EchoServer_{}_{}'.format(*self.address)
)
self.log.debug('connection accepted')
def data_received(self, data):
self.log.debug('received {!r}'.format(data))
self.transport.write(data)
self.log.debug('sent {!r}'.format(data))
def connection_lost(self, error):
if error:
self.log.error('ERROR: {}'.format(error))
else:
self.log.debug('closing')
super().connection_lost(error)
factory = event_loop.create_server(Server, *SERVER_ADDRESS)
server = event_loop.run_until_complete(factory)
log.debug('starting up on {} port {}'.format(*SERVER_ADDRESS))
# Enter the event loop permanently to handle all connections.
try:
event_loop.run_forever()
finally:
log.debug('closing server')
server.close()
event_loop.run_until_complete(server.wait_closed())
log.debug('closing event loop')
event_loop.close()
【问题讨论】:
-
你想要一个class还是一个object?
-
我想要一个存储用户数据的客户端类。每个用户都将拥有一个 Client 类。如果我进行 print(client.Username) 他们将看到自己的用户名。
-
是的,但您的术语已关闭。类是代码,对象是运行该代码的实例。您要创建的东西显然是一个对象,而不是一个类(即不是新代码。实际上,那会很有趣!)
-
创建一个
Client对象只是object = Client(parmeters...),但我无法立即告诉您希望在这堵代码墙的哪个位置发生这种情况。也许edit你的问题实际上是问一个问题,并将代码简化为minimal reproducible example。
标签: python python-3.x python-asyncio