我使用安装了twisted和Autobahn websocket
pip install twisted
pip install autobahn
Run Code Online (Sandbox Code Playgroud)
但是当我从Autobahn导入任何工厂时,我得到了无法导入名称的错误.
>>> from twisted.internet import reactor
>>> from autobahn.websocket import WebSocketClientFactory
Traceback (most recent call last):
File "<console>", line 1, in <module>
ImportError: cannot import name WebSocketClientFactory
Run Code Online (Sandbox Code Playgroud)
有什么我想念的吗?这是冻结点
Twisted==13.2.0
Twisted-Core==12.3.0
Twisted-Names==12.3.0
Twisted-Web==12.3.0
autobahn==0.7.4
websocket==0.2.1
websocket-client==0.13.0
Run Code Online (Sandbox Code Playgroud) 如果我进行计数查询,我会在<2秒内得到结果
db.coll.find({"A":1,"createDate":{"$gt":new Date("2011-05-21"),"$lt":new Date("2013-08-21")}}).count()
Run Code Online (Sandbox Code Playgroud)
这使用以下索引
db.coll.ensureIndex({"A":1,"createDate":1})
Run Code Online (Sandbox Code Playgroud)
类似地,有4列A,B,C,D(值总是0或1),我运行4个计数查询并在<10秒内得到结果.
我查看了聚合框架文档并创建了一个聚合查询来一起完成所有4个总和.
db.coll.aggregate( { $match : {"createDate":{$gt:new Date("2013-05-21"),$lt:new Date("2013-08-21")} } },
{ $group :
{ _id:null,
totalA : { $sum : "$A" },
totalB : {$sum: "$B},
totalC:{$sum: "$C"},
totalD:{$sum: "$D"}}}
)
Run Code Online (Sandbox Code Playgroud)
我还创建了一个索引:
db.coll..ensureIndex({"createDate":1,"A":1,"B":1,"C":1,"D":1})
Run Code Online (Sandbox Code Playgroud)
根据文档,该索引涵盖了我的聚合函数.但聚合的返回时间约为18秒.
我在这里很困惑.有没有什么基本的我错过或有任何基本概念落后,这使得聚合慢于计数.我还担心由于从获取计数的代码中从mongo触发的查询数量而导致的开销.
单击链接后,我想下载文件。该文件是动态提供的。
<a href="/server/myfunc?id=XXX" download="proposed_file_name">Download!</a>
Run Code Online (Sandbox Code Playgroud)
但是,如果/ server / myfunc?id = XXX链接未提供文件,则我需要能够向用户显示错误。如果文件不存在,我可以通过此链接返回布尔值false或任何http代码。
什么是最适合此实现的方法。请注意,我不希望以任何方式更改页面的当前状态,只需触发文件下载而不影响页面即可。如果不下载文件,则显示错误。
当我尝试使用Tornado的websocket服务器处理程序从线程写入消息时,我随机获得错误1006((我通过删除TCP连接失败了WebSocket连接).
我创建了N个线程并将我的ws_handler传递给它们.但是当我开始使用时
self.ws_handler.write_message(jsondata)
Run Code Online (Sandbox Code Playgroud)
对于大量的线程,我不断得到同样的错误.
根据我的理解,1006是在websockets之间跳过'heartbeat'通信时丢弃的TCP连接.我猜这是因为线程并行运行并尝试发送消息.我使用2-3线程测试它,它工作正常,但对于大数量,它没有.
我想知道是否有任何方法可以在线程内实现消息发送.(意味着锁由ws_handler内部处理并相应地发送).
我想到的一个解决方案是将jsondata推入队列并让另一个单线程推送消息,但我担心这会造成瓶颈.
我的客户是AutobahnPython.