k00*_*00k 14 sockets iphone couchdb appcelerator node.js
首先,这是我最初提出的所有问题.
我正在使用Appcelerator Titanium来开发iPhone应用程序(最终也是Android).我正在使用Titanium的Titanium.Network.TCPSocket对象直接连接到CouchDB的端口.我相信它使用了Apple SDK的CFSocket/NSStream类.
连接后,我只需写:
'GET /mydb/_changes?filter=app/myfilter&feed=continuous&gameid=4&heartbeat=30000 HTTP/1.1\r\n\r\n'
直接到socket.它使"永久"打开并在每次更新数据库时返回JSON数据并匹配过滤器和更改请求.凉.
我想知道,是否可以将直接连接到CouchDB的插座这样的,不然我会过得更好打开插座而不是Node.js的,也许用这个CouchDB的Node.js的模块来处理通过node.js的CouchDB的代理?
我主要担心的是表现.我对CouchDB没有足够的经验来知道是否点击它的套接字并直接传递虚假的HTTP请求是不错的做法.寻找有关任何后果或替代建议的经验和意见.
Ben*_*man 13
又是我.:-)
CouchDB的继承二郎超级并发处理,它被写英寸二郎的语言使用轻量级进程和消息中的那些过程之间传递,以实现高并发负载下具有优异的性能.它也将利用所有cpu内核.
Nodejs运行一个进程,基本上只在该进程中执行一件事.它基于事件的非阻塞IO方法确实允许它在等待IO块时进行多任务处理,但它仍然只能一次做一件事.
两者都应该能够轻松处理成千上万的连接,但是我希望CouchDB能够比Node更好地处理并发(并且你的工作量更少).请记住,如果将Node放在CouchDB之前,Node会增加一些延迟.但是,如果你将它们放在不同的机器上,那可能只会引人注意.
只要您编写符合规范的格式良好的HTTP请求,通过TCPSocket直接写入Couch就可以了.(你没有传递一个虚假的请求......这是一个真正的HTTP请求,你发送的就像其他任何请求一样.)
注意:HTTP 1.1确实要求您在请求中包含Host标头,因此您需要更正代码以反映该OR或仅使用HTTP 1.0,这不需要它来保持简单.(我很好奇你为什么不使用Titanium.Network.HTTPClient.它是否只在请求完成后给你请求体?或者什么?)
无论如何,CouchDB可以完全处理直接连接 - 除非你花费很多精力进入你的Node代理 - 当你有10万人同时玩游戏时,它可能会给用户带来更好的体验.
编辑:如果您使用节点写一个实际的HTTP代理.这比使用您提供的模块运行速度快得多,并且实现起来更简单.(而不是定义自己的API,然后向Couch发出请求,您可以将某些请求传递给CouchDB并阻止其他请求,例如,出于安全原因.
另请参阅"多节点"的工作原理:http: //www.sitepen.com/blog/2010/07/14/multi-node-concurrent-nodejs-http-server/
| 归档时间: |
|
| 查看次数: |
2449 次 |
| 最近记录: |