gpt4 book ai didi

python - Twisted - 将factory.clients中的当前连接与唯一ID相匹配

转载 作者:太空宇宙 更新时间:2023-11-03 18:35:38 27 4
gpt4 key购买 nike

我正在尝试使用 Twisted 实现聊天服务器,但在将唯一用户 ID(存储在数据库中)与存储在factory.clients 中的当前 session 配对时遇到困难。在下面的代码中,我假设新连接的用户在加入服务器后将立即发送其用户 ID。有了这个假设,我将factory.clients中的最后一个条目作为其连接的索引并将其存储在数据库中。这种方法有很多缺陷,我正在尝试确定一种更好的方法。

我的主要问题:将唯一用户 ID 与连接配对的最佳方式是什么?

class ChatPlace(Protocol):
def connectionMade(self):
self.factory.clients.append(self)
print "clients are ", self.factory.clients
print "connection from", self.transport.getPeer().host

def connectionLost(self, reason):
self.factory.clients.remove(self)

def dataReceived(self, data):

#Variables and data parsing logic removed for brevity

#The cur_connect_idx should be mapped to factory.clients but I'm not sure of the best way
cur_connect_idx = len(self.factory.clients)-1

#Once the client_id can be properly accessed, I want to store info as follows so that a connection can be paired with a user_id
sql = "INSERT INTO user_db(user_id, user_name,cur_connect_idx) VALUES('%s','%s', '%d')" % (self.name, self.transport.getPeer().host,'',client_id)

#Remaining code omitted for brevity

最佳答案

为什么需要将连接 ID 放入数据库?

数据库是您保持持久状态的地方。连接和连接 ID 是 transient 的。

当您确定连接代表哪个用户时,将该信息放入工厂(或其他一些长期存在的对象)的数据结构中。

例如:

def dataReceived(self, data):
username = self._parseAndExtractUsername(data)
if username is not None:
self.factory.users[username] = self

现在您在工厂中有一个字典,在所有协议(protocol)实例之间共享,它将用户名映射到协议(protocol)实例。

关于python - Twisted - 将factory.clients中的当前连接与唯一ID相匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21641967/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com