【问题标题】:Two way communication with server side objects for web-application development与服务器端对象进行两种方式通信以进行 Web 应用程序开发
【发布时间】:2012-10-16 13:13:31
【问题描述】:

背景

我的背景是使用 C++ 进行嵌入式设备和桌面的大规模面向对象中间件和应用程序开发。现在我们需要为我们的初创公司创建一个大规模的网络应用程序。


问题

基于请求-响应和基于连续轮询的当前 Web 开发框架看起来非常原始、低效。

我正在寻找完全服务器端的面向对象和基于事件的编程。 这是一个例子吧,

服务器上有一个名为employeeManager的持久对象,

这个对象的方法

empList getAllEmployeeList();  
empList getEmployeeOfDepartment(string strDept);  
/*Some more */

此对象的事件

employeeAdded(empID);  
employeeEdited(empID);  
employeeRemoved(empID);  
/*Some more */

现在,客户端 javascript 应该能够调用这个(服务器端)对象的方法,并且应该能够接收这个对象的事件。我们可以在异步模式下获得方法调用的结果。框架还应该提供一种方法,以便视图(或 html-js 页面)可以注册所需的服务器端事件。

是否有适用于这种方法的框架。在socketIO之上有这样的东西吗?有没有在客户端 javascript 和服务器端对象之间提供良好的双向 RPC 的框架?

【问题讨论】:

  • 如果您说您正在使用哪种服务器堆栈,这可能更容易回答 - 例如,github.com/SignalR/SignalR 有助于将服务器端事件推送到基于 .NET 的堆栈中的 JS 客户端(以及其他) .
  • @JcFx,非常感谢您的回复。请不要 .net,我将使用 Java 或 Javascript 进行服务器编程。
  • 从头开始构建系统的那一部分是乐趣的一半——或者也许这只是我 :) 恐怕我不知道有任何预构建的系统可以满足您的要求,但我正在看人们提出什么 - 是一个很好的问题。向 xyu +1 说明我会从什么开始。

标签: javascript node.js web-applications


【解决方案1】:

尝试以下组合:

Node + socket.io + Backbone.Model + 一点想象力。

我认为缺少的部分是一个可以在服务器端和客户端使用的模型结构。模型需要在服务器和客户端之间同步状态。

这是一篇我觉得很有趣的文章,也许你可以使用所描述的技术?

文章:

http://blog.andyet.com/2011/feb/15/re-using-backbonejs-models-on-the-server-with-node/

【讨论】:

    【解决方案2】:

    NodeJSsockets.io。这些可以帮助达到预期的效果。

    【讨论】:

    • 是的,但问题是我们最终会为它编写大量的样板文件。它是否提供了一种方法,以便您可以在客户端 javascript 上创建一个内部处理所有服务器端对象通信的存根?
    • 也许在 js 类中为每种类型的服务器端对象定义功能可以做类似的事情,但是所有类型的全局处理程序 - 我不知道。取决于所需的功能
    【解决方案3】:

    Meteor 是一个基于 Node.js 的框架,它使用 sock.js 进行 websocket 通信,使用 MongoDB 作为面向水平可扩展应用程序的数据库。在客户端-服务器同步方面,Meteor 几乎可以为您完成所有繁重的工作——您不必为数据库同步编写任何代码。结果是一个最小的代码库,主要是应用程序的逻辑,而不是 req/resp 开销。您可以在这里查看示例:http://meteor.com/examples/leaderboard

    【讨论】:

      【解决方案4】:

      如果您想要跨语言 RPC,您可能会发现 Apache Thrift 很有用。我相信有一个 Javascript 客户端(但从未使用过它)。正如许多其他人所指出的那样,您可以在 Socket.IO 之上构建一个 RPC 框架,但这感觉就像把一只猫画成一头牛……即有趣,但不是特别高效

      我确定您已经或有一些遗留限制,但如果您还没有,我会花点时间考虑一下 RPC 是否真的是您想要使用的模型。 RPC 泄漏地抽象了网络延迟的存在,因此将一些不稳定的假设纳入了应用程序的基础。总的来说,有一个相当短且易读的critique of RPCAST 不少于)可能值得一读。

      【讨论】:

        【解决方案5】:

        如果您熟悉 C++,您可能需要查看 G-WAN。他们有一个使用 Comet 的很好的例子(你正在寻找的东西),还有 Node.JS 包装器。

        G-WAN 还允许使用您需要的任何语言编写客户端小程序。所以,对于您来说,C++ 可能正是您正在寻找的。​​p>

        这是一个非常可扩展的 Web 应用程序服务器。从我看到的所有基准测试来看,Node.JS 不能很好地适应高并发(我可能错了,如果我错了,请告诉我,并提供信息)。话虽如此,我所做的事情与您所说的非常相似。我所要做的就是编写一个非常简单的包装器,将 JS 翻译成我当时使用的任何语言(对我来说,我用 PHP、MivaScript、SMT 和 C 完成了它)。

        但关键(对我而言)是使用 Comet,以减少不必要的服务器轮询。

        【讨论】:

          猜你喜欢
          • 2013-09-01
          • 2023-03-29
          • 2016-09-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-09-05
          • 2016-01-20
          • 1970-01-01
          相关资源
          最近更新 更多