2011-11-06 69 views
0

我已经问了一个类似的问题,但这个问题有点不同/具体:Node.js + Socket.io:模板@服务器或浏览器?通过ajax或socket.io加载内容?

我即将开始开发社交网站(对于本地用户组),具有时间线,即时通讯/聊天,论坛,...

Node.js和socket.io(或now.js)在后端。 jQuery(也许还有backbone.js或类似的)在前端。内容通过socket.io或ajax加载,并通过url哈希导航。

有两件事我不能决定走哪条路。我希望这里有些人可以提供一些好的或不好的经验。

  1. 模板在服务器或浏览器?我不知道是否最好加载一个完整的HTML网站+时间线,论坛帖子,即时通讯/聊天的实时更新(也在HTML),或通过ajax或socket.io使用类似REST api的东西,并做客户端网站上的模板。我从来没有这样做过。你需要下载模板等,有没有人在这方面的经验?还有两种实现类似休息的API的方法:例如,请求论坛帖子,然后请求与该帖子关联的用户等等(就像服务器端MVC一样) - 或者 - 请求论坛帖子,服务器回答所有需要的信息。

  2. 通过ajax或socket.io加载内容?我明确地使用socket.io或now.js进行实时通信(IM,聊天)和pubsub(在主页上 - >订阅新的时间线更新,论坛主题 - >订阅新帖子)。但是,我是否也应该通过套接字加载HTML(或提供类似REST的API,请参阅问题1)?当人们在选项卡中打开论坛帖子时(我通常会做很多),这意味着很多套接字连接。我不确定WebSocket建立连接需要多长时间。

所以有一个4层的方法来做到这一点:通过AJAX

  1. HTML - 大概是不需要大量的JavaScript做模板的最稳定的方法 - 浏览器可以使用开放的HTTP连接要求东西。
  2. HTML通过socket.io - 必须建立websocket来加载内容(可能会更慢)
  3. API通过AJAX - 因为它可能需要更多的请求作为HTML通过AJAX可能会有一些HTTP头开销+你需要每个请求中的身份验证 - 我不是许多Ajax请求的朋友。
  4. API通过socket.io - 套接字只能被验证一次,您可以动态地请求API对象。不过,我仍然会通过HTTP为浏览器缓存加载模板和js。

我知道这是一个很大的帖子,但我现在正在辩论很多天,只是不能决定,因为一旦开始开发,切换系统将会有很多工作。这不是一个公共项目,它仅限于约10k-15k的本地人,因此绝对不能是完美的,这是一个很好的机会,以我的观点学习新事物(我完全陌生于节点,经典的PHP MVC + jquery dev在这里)。

回答

1

我认为你应该在后端使用RESTful api,让模板只发生在前端(可能与Backbone),并且只使用Socket.IO来实现实时的功能(如聊天)。将websockets用于加载HTML之类的东西没有任何意义,因为它很可能永远不会改变。

所以我的投票是:

1)HTML通过AJAX
2)经由Socket.IO

经由AJAX
3)实时通信,诸如聊天消息(或其他东西,不断的变化)API
+0

没有静态HTML(完全基于用户的内容),除了加载所有的JavaScript进入/索引页。示例论坛:加载HTML(线程列表,帖子)并显示它们,或者通过API(线程列表作为线程对象数组,线程作为post对象数组)加载json并将它们呈现在前端。如果我选择使用API​​方式,我认为最好通过套接字访问API,没有标头,没有cookie。 – Eliasdx

+0

那么如果这个内容经常发生变化,并且希望保持用户更新,我可以通过两种方式实现这一点:1)使用api从数据库中获取最后的X帖子等等2)使用Socket保持第二次更新。 IO – alessioalex

0

虽然确实没有一个明确的答案,因为它取决于。

如果你需要被搜索引擎抓取,你可以不是只依靠客户端处理。如果您的个人观点较轻,并且/或者您需要支持移动设备,则您应该具有初始渲染服务器端。

目前,我会建议使用,无论您的客户端应用程序和服务器端可以使用API​​。如果您使用节点进行服务器端渲染,则可以重新使用许多相同的逻辑,包括API客户端。

走出几步远,如果你看看开始在GitHub上雅虎通量例子项目,您可以使用相同的逻辑客户端和服务器端,包括与之反应的观点呈现。这不是一个简单的解决方案,并且需要一些工作。当客户端启动你的聊天/即时通讯位

对于互动元素,服务器端渲染可以说是微乎其微与卖场力推的事件通过sockjs/socket.io连接最多。

您将有扩展性的问题,当涉及到多个进程运行,可能需要通过较长的重新连接周期或错过的IM消息的数据库支持的发布/订阅链。没有魔法弹。

现在,我喜欢通量+反应......当Angular2出来,它可能对服务器端呈现一个更好的故事。

相关问题