Javascript node.js中的MVC/WebSocket
我正在考虑构建一些使用WebSocket的intranet应用程序。我目前正在服务器上为我的web框架使用Python/Pylons,并进行轮询以更新页面DOM中的项。挂架不适合与WebSocket(IMHO)通信,因为它在每个连接中使用一个线程。我正在考虑使用node.js作为服务器,与来自web应用程序的websocket连接进行通信。以下是我的应用程序的“10000英尺视图”:Javascript node.js中的MVC/WebSocket,javascript,model-view-controller,node.js,websocket,pylons,Javascript,Model View Controller,Node.js,Websocket,Pylons,我正在考虑构建一些使用WebSocket的intranet应用程序。我目前正在服务器上为我的web框架使用Python/Pylons,并进行轮询以更新页面DOM中的项。挂架不适合与WebSocket(IMHO)通信,因为它在每个连接中使用一个线程。我正在考虑使用node.js作为服务器,与来自web应用程序的websocket连接进行通信。以下是我的应用程序的“10000英尺视图”: 挂架提供web内容(html、css、图像、javascript等) 页面应用程序上的JavasSript打开
- 挂架提供web内容(html、css、图像、javascript等)
- 页面应用程序上的JavasSript打开到node.js服务器的websocket
- js服务器通过websocket将数据推送到应用程序
- JavaScript根据websocket中的数据更新页面DOM元素
- 让Python脚本通知node.js应用程序(通过套接字或HTTP)
- 或者从node.js进行轮询,因为它不知道其环境之外的更改
// query every second or so
setInterval(function () {
// query database
doSomeDatabaseStuff(function (res) {
// check dirty
if (res.changed) {
// notify all clients
allConnectedSockets.forEach(function (socket) {
socket.send({ msg: "update" });
});
}
})
}, 1000);
通过这种方式,您可以使用一个进程轮询数据库,并使用一个可扩展的体系结构通知连接的客户端。数据库仍然可以从任何来源填充。Sails.js是一个用于节点的MVC框架,其独特之处在于RESTfully路由Socket.io消息,其方式与Express路由相同 Sails目前使用Sequelize,默认情况下配置为使用mySQL(但也支持SQLite和Postgres)。我们正在切换到一个模型,允许您选择自己的ORM,这将允许我们支持JugglingDB(其中包括对Mongo的支持) 它还附带了一个前端组件,桅杆。Mast提供了与Meteor类似的功能,因为它允许您从客户机直接与数据库通信。如果需要提供更复杂的功能,只需在后端添加一个控制器
更多信息:为什么pylons应用程序不能通知node.js?可以,这就是我现在正在做的。JavaScript使用AJAX/JSON轮询Pylons应用程序以获取数据。然而,这种方法通常是轮询未更改的数据。另外,我的应用程序在不同用户浏览器上运行的所有“实例”都在轮询数据。感谢您的反馈。在发布了我最初的问题后,我开始思考这个问题;让node.js进行轮询意味着无论有多少客户端(web应用程序)连接到它,只有它在进行轮询。我想我要寻找的是应用程序/数据库的不同域如何设置“脏”位,并以某种方式使node.js意识到这一变化。我想这可能是一个“控制器”发送到node.js的更改通知,它会更新其观察者,这可能会消除轮询。脏设置可以通过多种方式完成。您可以将数据写入数据库,如果MAX(id)高于上一次,则可能发生了变化。或者您可以打开从Python到node.js的连接,这可以通过另一个套接字或普通HTTP来完成,并让Python通过这种方式通知应用程序。node.js应用程序可以通过通知其客户端来响应此请求。感谢您的反馈,我将查看Sails.js,看看它是否适合我。再次感谢!令人惊叹的!如果您有反馈,请告诉我。我正试图将功能上独立的部分提取到更小的模块中,这样人们就可以使用适合自己的模块(即,我们刚刚取出资产编译器,制作了一个单独的节点模块)