到目前为止,我已经有了将websocket服务器连接到websocket客户端的基本代码。我使用Autobahn作为服务器代码,使用Advanced REST Client作为客户端。在DBAlertProtocol
类中的一个单独的方法中,我在CouchDB中长时间轮询数据库,以查找发生的任何更改,即添加、删除、更新等。此方法在websocket连接打开5秒后得到调用。
如果数据未显示在客户端,或者有时需要很长时间才能到达,则使用sendMessage
会出现问题。
有没有办法改变通讯选项?数据会不会太大而无法发送?我试图找出为什么我的其他示例可以成功地发送数据,但Couchdb更改通知不能。
下面是我到目前为止的代码。
提前谢谢!
服务器派克
import sys
import logging
import couchdb
from twisted.python import log
from twisted.internet import reactor
from autobahn.twisted.websocket import WebSocketServerFactory, \
WebSocketServerProtocol, listenWS
from autobahn.twisted.resource import WebSocketResource
couch = couchdb.Server("http://localhost:5984/")
db = couch['event_db']
class DBAlertProtocol(WebSocketServerProtocol):
def onConnect(self, request):
print("Connection made on server side")
def onOpen(self):
print("WebSocket connection open.")
reactor.callLater(5, self.check_db_changes)
def check_db_changes(self):
since = 1
print("\nstart loop\n")
while True:
changes = db.changes(since=since, include_docs=True)
since = changes['last_seq']
no_docs_changed = len(changes)
counter = 0
for changeset in changes['results']:
print("\nChange detected!\n")
try:
doc = db[changeset['id']]
except couchdb.http.ResourceNotFound:
print("Resource not found, or was deleted.")
else:
counter += 1
print("Number of docs effected: {}".format(str(counter)))
# Send change data to MW
self.sendMessage(str(changeset))
def onClose(self, wasClean, code, reason):
print("WebSocket closed on server side: {}".format(reason))
def onMessage(self, payload, isBinary):
print("Data received from database: {}".format(payload))
self.sendMessage("Message received.")
class DBAlertFactory(WebSocketServerFactory):
protocol = DBAlertProtocol
def main():
log.startLogging(sys.stdout)
port = 8000
factory = DBAlertFactory(u"ws://127.0.0.1:8000")
listenWS(factory)
print("Listening on port: {}".format(str(port)))
print("Starting reactor...")
reactor.run()
if __name__ == "__main__":
main()
check_db_changes
永远不会放弃控制,所以程序的任何其他部分都不能运行:
while True:
相反,尝试类似于twisted.internet.task.LoopingCall
。
Apache CouchDB是最新的数据库之一。 CouchDB具有无模式的文档模型,更适合常见应用。可支持非常大数据量查询。 使用CouchDB的主要原因是什么? CouchDB易于使用。 有一个单词可以描述CouchDB - “Relax”。 它也是组成CouchDB官方标志一个单词。 “Apache CouchDB已经开始了,现在是放松时间。” CouchDB具有基于HTTP的REST AP
发送消息到窗口或控件(SendMessage 还会等待回复)。 PostMessage, Msg [, wParam, lParam, Control, WinTitle, WinText, ExcludeTitle, ExcludeText] SendMessage, Msg [, wParam, lParam, Control, WinTitle, WinText, ExcludeTitle,
我至少读了5篇关于这方面的文章,但我似乎不明白。我有一个xml文件,它已经在浏览器的内存中,我正试图从我的数据库中更新一个文档,我已经有了该文档的文档ID。做这件事最好的方法是什么?jquery.couch.js中是否有对此的支持,因为我似乎找不到任何支持。 为了我的理智起见,我附上了一些带有硬编码值的代码: 我得到一个DOM18错误...但我使用的是一个公共服务器。思想?
主要内容:CouchDB使用Fauxton删除数据库,CouchDB使用cURL工具删除数据库CouchDB使用Fauxton删除数据库 打开Fauxton网址:http://localhost:5984/_utils/ ,如下图所示 - 单击其中一个数据库:,将看到这个数据库所有信息,并点击删除(“Delete Database…”)选项来删除当前数据库(),如下图中所示 - 它将显示一个弹出消息,要求确认数据库名称。如下图中所示 - 点击“Delete”后,数据库就被删除了,列表中再没
主要内容:使用Fauxton创建数据库,CouchDB使用cURL工具创建数据库在CouchDB中,数据库是存储文档的最外层结构。 CouchDB提供cURL实用程序来创建数据库。 您也可以使用的CouchDB Web界面。 使用Fauxton创建数据库 在网络浏览器中打开以下链接: 应该会看到类似下面的一个页面: 点击红色圆圈中的“Create Database”选项卡,创建一个名为“”的数据库。 它将显示一条消息,表示数据库已成功创建。可以在概览(Overview)选项卡
问题内容: 我正在尝试使用Node.js连接到Cloudant上的CouchDB数据库。 这在外壳上起作用: 但是此node.js代码不起作用: 它给了我这些数据: 如何使用Node.js列出我的所有数据库? 问题答案: 内置的Node.js http客户端相当低级,它不支持现成的HTTP Basic身份验证。第二个参数只是一个主机名。它不希望那里有凭据。 您有两种选择: 1.自己构造HTTP基本