1
我試圖實現一個使用Twisted的聊天服務器,但是難以將存儲在factory.clients中的當前會話與唯一用戶ID(存儲在數據庫中)配對。在下面的代碼中,我假設新連接的用戶在加入服務器後立即發送其用戶ID。有了這個假設,我將factory.clients中的最後一個條目作爲其連接的索引並將其存儲在數據庫中。這種方法存在很多缺陷,我試圖確定一個更好的方法。Twisted - 在factory.clients中與唯一ID匹配的當前連接
我的主要問題:什麼是將唯一用戶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,但這是我認爲可以解決將持久數據庫信息與瞬態用戶連接配對的問題的方式。我瀏覽了一些教程,但從未遇到任何與持久存儲配對的東西。你如何完成將用戶連接置入「工廠數據結構」? – CaptainIowa
進一步補充說,我目前的範例是使用以下結構向服務器發送消息:<用戶ID,聊天文本,收件人用戶ID>。收到消息後,應使用收件人用戶標識映射到其當前服務器連接。 – CaptainIowa
嗨!我不會爲你寫程序,對不起。對於我給出的答案有什麼不清楚的地方嗎?我認爲它包含解決您的問題所需的所有部分。謝謝! –