这是我的想法:
我想在特定端口上使用龙卷风服务器,假设 8666
。
这是我到目前为止所做的:
现在,我希望客户端连接到端口 8666
(纯 TCP)并发送一些内容(可能是他的会话cookie或其他内容) )这样我就可以在龙卷风网络服务器上看到客户端是否经过身份验证,并查看数据库以找出龙卷风网络服务器上还连接了哪些其他配偶,以便当此客户端写入内容时,我可以将其消息发送给所有其他“关注”的关联客户。
我没有找到任何关于此的文档。你知道怎么办吗?任何一个例子,或者如果我不在正确的轨道上我该怎么做呢?
答案 0 :(得分:1)
如果您的Tornado进程在与Django应用程序相同的域上运行,则会话cookie将由浏览器在websocket握手时发送,并可通过WebSocketHandler.get_cookie()
方法访问。
以下是一个示例,假设全局变量CLIENTS
跟踪已连接的身份验证客户端:
def open(self):
"""Authenticate client based on session cookie, add broadcast notification"""
session_id = self.get_cookie('sessionid')
if not session_id:
self.close()
self.authenticate_user(session_id)
if self.user is None:
self.close()
self.CLIENTS.append(self)
self.notify_all_clients()
def authenticate_user(self, session_id):
"""Retrieve User instance associated to the session key."""
session = SessionStore(session_key=session_id)
user_id = session.get('_auth_user_id')
if user_id is None:
return
try:
user = User.objects.get(pk=user_id)
except User.DoesNotExist:
self.close()
else:
self.user = user
希望这有帮助!
编辑:
请注意,为了能够使用Django ORM,您必须将DJANGO_SETTINGS_MODULE
环境变量设置为应用的设置模块路径(例如'myapp.settings'
,确保可以通过{{1}找到它然后按照Django docs中的说明调用sys.path
。