Articles of devise模式

PHP + MySQL + Socket.io – 实时在线状态的朋友

我使用PHP / MySQL和node.js(socket.io)创build了一个类似于facebook的实时聊天应用程序,但是我现在面临以下问题。 脚本 login的用户有一个类似Facebook的朋友列表,当他的任何朋友离开,离线,在线等我想他的朋友列表实时更新,而无需重新加载整个朋友列表,例如ajax轮询每x秒。 login用户在网站上进行的每一个操作 ,比如页面的变化,新的聊天窗口,search,或者我有一个名为last_active ,用当前的unix_timestamp进行更新。 这是为了跟踪用户在线或离开。 如果时间戳大于300秒,则用户离开。 每三十秒钟一次 ,数据库last_online用户login的unix_timestamp更新last_online列。 这是为了跟踪用户在线。 如果时间戳大于35秒,我们可以认为他已经closures了窗口,将被视为离线,而不是离开。 用户也可以手动设置他的在线状态为繁忙,不可见等,并且这被设置为login用户的列的custom_status 。 上面的一切工作,因为它应该提供,用户总是重新加载页面,看看他的朋友有什么在线状态,但我希望这是实时更新,而不是当重新加载整个页面或使用Ajax轮询来重新加载整个朋友列表。 我正在考虑在客户端比较当前的在线状态,当发生变化的时候发送到socket.io。 然后,我遍历所有连接的客户端,并向所有连接的朋友发出用户新的在线状态。 但是,我想这将有性能问题,当说例如1000个用户连接? 你将如何处理?

节点套接字应用程序新实例作用

这是一个简单的套接字应用程序使用事件库模式 const invitation = require('./invitation'); module.exports = function(io){ io.on('connection', (socket)=>{ var prepareGame = new PrepareGame(socket) socket.on("sendInvitation",(data, ack)=>{ prepareGame.sendInvitation(data,ack) }); }); } 并在prepareGame.js const events = require('events'); const util = require('util'); class PrepareGame extends events { constructor(socket) { super(); this.user = socket.user var self = this draftInvitation(data){ this.newInvitation = { from_user: self.user.id, to_user: data.to_user, message:data.message, created_at:moment().unix(), […]

如何在MongoDB中添加2个引用到单个模型?

我正在开发一个博客网站(如中等),其中将有一个用户模型,博客模型和类别模型。 基本思想是将用户存储在用户数据库中,博客数据库中的所有博客和类别数据库中包含可以发布的不同types的博客。 我想在BlogDB中存储用户(谁发布了博客)的参考和博客的类别。 我所做的模式如下 – 博客架构 – var blogSchema = new mongoose.Schema({ title: String, content: String, image: String, createdAt: Date, blogCategory : { id: { type : mongoose.Schema.Types.ObjectId, ref : "Category" } }, author: { id: { type: mongoose.Schema.Types.ObjectId, ref: "User" }, username: String }}); 用户架构 – var UserSchema = new mongoose.Schema({ firstname: String, lastname: […]

无法将值从服务返回到控制器以在node.js中进行呈现

我最近开始使用nodejs,因为我想转到一个新的项目(我通常是一个Java程序员)。 我正在做一个rest服务API。 到目前为止,我已经有一个路由模块,它定义了我的端点,然后调用一个控制器函数,它保留了我的对象,然后返回响应。 我想委托我的持久性逻辑到一个服务模块,以保持我的控制器。 对于我更复杂的情况来说,这是绝对必要的。 我正在努力寻找如何成功地重构我的代码来使用服务。 我到目前为止还没有成功地调用一个服务方法,从我的控制器返回一个值,然后渲染。 我将提供我正在工作的原始模块,然后尝试将逻辑拉出到返回值的服务模块中: 路线/ index.js const UserController = require('../controllers/userController'); const ProfileController = require('../controllers/profileController'); module.exports = (app) => { app.get('/api', (req, res) => res.status(200).send({ message: 'Welcome to the Todos API!', })); app.get('/api/users', UserController.list); app.post('/api/users', UserController.create); app.get('/api/users/1/profile', function() { console.log('got profile for user 1'); }); app.post('/api/users/1/profile', ProfileController.create); }; 车型/ user.js的 'use strict'; […]

多个REST风格的Web服务调用与MySQL联接

我目前正在使用node.js为我当前的iPhone应用程序构build一个RESTful Web服务。 目前,该系统工作如下: 客户端向node.js服务器发出请求,服务器做适当的计算和MySQL查询,并返回数据 客户端的反应器处理响应并更新UI 有一件事我一直在想的是对我的服务器进行多个API调用的差异(在性能和最佳实践方面)与一个在MySQL数据库中执行多个连接语句的调用,然后返回一个构造的对象。 例如:可以说我正在加载一个用户configuration文件显示在用户界面。 用户具有个人资料图片,基本信息和新闻提要项目。 使用选项一,我会做如下: 向服务器发出一个getUser请求,这将在数据库中执行一个查询,如下所示: Select * from user join user_info on user.user_id=user_info.user_id left join user_profile_picture on user_profile_picture.user_id=user.user_id 。 服务器然后将返回一个构造的用户对象,其中包含来自每个表的信息 客户端等待服务器的响应并立即更新所有内容 选项2将是: 向服务器发出3个asynchronous请求: 的getUser getUserInfo getUserProfile 每当收到任何请求时,UI都会更新 所以给了这两个选项,我想知道哪个提供更好的可伸缩性。 目前,我正在考虑select2,原因如下: 每个asynchronous请求将比选项a中的查询更快,从而更快地向用户显示某些内容 我也整合了Memecache,我觉得这3个独立的调用将更容易caching特定的结果(例如,不caching用户configuration文件,而是cachinguser,user_info和user_profile_picture)。 任何想法或经验?

这是一个很好的Web应用程序架构吗?

我试图自己build立一个网站,但我也想build立一个本地的移动应用程序,将在未来访问相同的数据库。 我现在想的是使用Node.js为DB构buildWeb服务包装器,并且每个DB操作都将通过Web服务API执行。 而对于网站框架,我打算使用Rails。 请让我知道这是不是一个好的build筑。 我不确定使用Web服务封装数据是不是一个好主意。 会有任何性能问题吗? 如果可行,我应该使用哪个数据库? 而钢轨可以通过networking服务与数据库沟通? 非常感谢! 更新 为什么人们投下这个问题?

如何使用docpad的缩略图插件而不将源图像复制到“out”?

我正在开发一个以照片为中心的电子书,通过PhoneGap进行打包和分发。 我使用DocPad的缩略图插件和图片填充作为响应图像。 我希望能够在@getThumbnail()中引用源照片(这是非常高分辨率的未优化图像),但我不希望将这些源图像复制到最终打包和分发的“out”文件夹中。 我如何做到这一点?

APIdevise:当API被authentication时,用户ID是否应该在url中?

当正在处理的数据与正在调用api的用户相关时,需要身份validation的API应该在url调用中包含用户标识? 试想一下,一个Web应用程序正在使用的API(都在同一个堆栈中),它使用一种authentication方法(cookie,基本authentication等)。 比方说,networkingpipe理用户所拥有的书籍。 当web应用程序调用/ users /:id_user / books列出属于id_user的书籍时。 在这种情况下,当请求正在被处理时,用户ID被应用程序知道。 例如,在使用Express和Passport的node.js中,用户标识位于request.user.id中,例如 所以我想知道是否是一个好的方法省略:id_user作为参数,因为代码可以做这样的事情: 路线:/用户/书籍(获取login用户的书籍) app.get('/users', auth(), function (req, res) { var userId: req.user.id; // Get user id from authentication data. // Find user's books books.find({ _owner: req.user.id}, function(err, books){return res.send(books)}); } 代替 路线:/ users /:id_user / books(使用显式用户标识从logging的用户获取书籍) app.get('/users/:id_user', auth(), function (req, res) { var userId = req.params.id_user; […]

MongoDB对每个用户的db.collection.distinct()的效率与保存为数据库条目和检索结果

在我的nodeJS应用程序中,我查询特定数据库字段的不同值的mongoDB 。 这将返回大约3000个值的数组。 每个用户都必须为每个会话获取这些数据(因为它是运行应用程序不可或缺的部分)。 我想知道是否更有效(和更快)为每个用户做到这一点: db.collection.distinct({"value"}, function(data){ // save the data in a variable }) 或者我是否应该在服务器端加载不同的值(比如每天一次),然后将其保存为每个用户检索的数据库条目,如下所示: // Server-side: db.collection.distinct({"value"}, function(data){ // save the data to MongoDB as a document }) // Client-side: db.serverInfo.find({name: "uniqueEntries"}, function(data){ // Save to browser as a variable }) 我自己testing过这个,不会注意到很大的区别,但是我是目前唯一使用这个应用程序的人。 一旦我得到10/100/1000 / 10,000用户,我想知道哪里最好用。

在这种情况下使用Javascript的原型inheritance有什么好处吗?

假设我在Javascript(NodeJS)中有两个场景: 情况1: var obj = {}; obj.getAll = function(..) {…}; obj.getOne = function(..){…}; module.exports = obj; 我在调用这个模块的代码中使用obj 。 VS的东西沿线: 情景2: var constructor = function(){}; constructor.prototype.findAll = function(..){…}; constructor.prototype.findOne = function(..){…}; module.exports = constructor; 在调用这个模块的代码中,我根据需要从constructor创build一个对象并使用它。 scheme2与scheme1相比有什么优势?