V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
iOS 开发实用技术导航
NSHipster 中文版
http://nshipster.cn/
cocos2d 开源 2D 游戏引擎
http://www.cocos2d-iphone.org/
CocoaPods
http://cocoapods.org/
Google Analytics for Mobile 统计解决方案
http://code.google.com/mobile/analytics/
WWDC
https://developer.apple.com/wwdc/
Design Guides and Resources
https://developer.apple.com/design/
Transcripts of WWDC sessions
http://asciiwwdc.com
Cocoa with Love
http://cocoawithlove.com/
Cocoa Dev Central
http://cocoadevcentral.com/
NSHipster
http://nshipster.com/
Style Guides
Google Objective-C Style Guide
NYTimes Objective-C Style Guide
Useful Tools and Services
Charles Web Debugging Proxy
Smore
zieglar
V2EX  ›  iDev

给iOS程序提供数据的服务器端采用什么开发更好?RoR、PHP、Java还是Node.js

  •  
  •   zieglar · 2012-08-25 16:34:26 +08:00 · 16672 次点击
    这是一个创建于 4233 天前的主题,其中的信息可能已经有所发展或是发生改变。
    服务器上本身的网站程序比较烂,不提供api支持,现阶段准备先将app开发出来,如果考虑到可维护和复用性以及后期将网站重新推翻,服务器端采用什么开发更好呢?
    45 条回复    2017-08-15 14:40:23 +08:00
    luin
        1
    luin  
       2012-08-25 16:40:24 +08:00
    会啥用啥啊。。
    lgn21st
        2
    lgn21st  
       2012-08-25 16:41:11 +08:00
    喜欢啥用啥,我喜欢Rails。
    zieglar
        3
    zieglar  
    OP
       2012-08-25 16:49:33 +08:00
    谢谢楼上两位的回答,补充一下我的背景,Java还停留在jdk6的时代,php粗通,正在看RoR和Node.js。
    然后iOS应用需求比较急,所以。。。
    zhouyang
        4
    zhouyang  
       2012-08-25 16:54:26 +08:00
    所以用python吧
    luin
        5
    luin  
       2012-08-25 16:58:42 +08:00
    不考虑Java, Node.js和RoR分别在性能和可维护上有优势,都是零基础入门的话RoR更易学。PHP很成熟,很容易招到人。我在用Node.js。
    zieglar
        6
    zieglar  
    OP
       2012-08-25 17:11:33 +08:00
    @luin 因为后期可能还要将网站推翻重写,不知道Node.js实现现有业务有没有什么难度,我先看看吧:)
    remaerd
        7
    remaerd  
       2012-08-25 17:39:42 +08:00   ❤️ 2
    我最近也在做后端,Python,Ruby,Node 都用了一下,最后选择 NodeJS。
    在选择时,Ruby on Rails,Django 第一个出局,因为考虑到 API 应该轻,快。
    Python 曾经用过 Flask,考虑过 Bottle。不过两者的 Extensions 的功能都无法需求。
    Ruby 的 Sinatra 是最好用的。选择 Sinatra + Mongoid,一个星期可以搞出来(我自己的情况)。
    现在选择用 NodeJS 的 ExpressJS + Mongoose 搭配。从 Ruby 转成 Node,主要是因为看上 NodeJS 的性能。Request per Second 的话,NodeJS 7000 左右,ExpressJS 3000 左右,Sinatra 900 左右,Ruby on Rails 300 左右。

    我写 JavaScript 都是用 CoffeeScript 写的,所以写起来就像写 Ruby 或 Python 一样,非常 Lisp。

    ExpressJS 的开发也是这些框架里面,最活跃的。
    remaerd
        8
    remaerd  
       2012-08-25 17:43:08 +08:00
    BTW,来自 Instapaper 的作者 Marco Arment 的建议是,坚持用 PHP,不过不能用 PHP 的各种框架。
    zieglar
        9
    zieglar  
    OP
       2012-08-25 20:03:29 +08:00
    @remaerd 谢谢你的解答:)我现在有用PHP在做开发,不过觉得原生PHP各种麻烦,没有各种东西用,界面搭起来也很烦,框架又不想去了解,所以才考虑在NodeJS和RoR之间选一个做为以后的方向
    daweiba
        10
    daweiba  
       2012-08-25 20:14:36 +08:00
    php吧 , 毕竟你熟悉
    先做出来再说
    pepsin
        11
    pepsin  
       2012-08-25 20:29:44 +08:00
    @remaerd Marco那个建议的前提是他不想用不成熟的框架,没有足够的大公司使用后期维护很可能会遇上麻烦。
    PHP他貌似用了Facebook开源出来的一些东西。
    PrideChung
        12
    PrideChung  
       2012-08-25 20:39:18 +08:00
    @remaerd 刚去爬了一下Marco的blog,Marco并非不用框架,只是他用的是自己造的框架。
    zieglar
        13
    zieglar  
    OP
       2012-08-25 21:53:13 +08:00
    @daweiba PHP我不是很熟悉,原生JS和Java更熟悉一点。。。我先看看合作方给我多少时间吧,个人更倾向用NodeJS一些,不过还有待了解
    ljbha007
        14
    ljbha007  
       2012-08-25 22:21:28 +08:00
    推荐java和nodejs

    java: 稳定、健壮的语言框架;外加JDK 6支持annotation特性,使java具备了一些动态语言才有的特性;nio库可以实现类似nodejs的事件驱动的IO;有很多成熟的第三方库和包管理系统(Maven)还有成熟的web框架;

    nodejs:高并发;已扩展;发展迅速;开发方便;

    缺点:

    java:容易把简单的问题复杂化;某些开发框架过于沉重,不适合快速原型;

    nodejs:不稳定;缺乏技术支持;难招人


    不过无论用那种语言或者框架,代码质量本身是很重要的,你可以用一个非常优秀的语言和框架,写出屎一样的代码
    crapthings
        15
    crapthings  
       2012-08-25 22:25:58 +08:00
    node.js

    +1 meteor.js
    zieglar
        16
    zieglar  
    OP
       2012-08-25 22:27:32 +08:00
    @ljbha007 那我如果用基于java的playframework呢?
    ljbha007
        17
    ljbha007  
       2012-08-25 22:34:54 +08:00
    @zieglar play我也只是浅尝过,跟人来说不是很喜欢,不过的确开发起来很轻便。我不喜欢的原因在于它仅仅考虑了web的快速开发,开发逻辑复杂的系统的时候,静态方法的方式会很吃力(因为不能通过继承来扩展功能,你想象一下当业务逻辑越来越复杂,你的Application类里边有成百上千个静态方法,每个静态方法都有不同的任务完成吗?),面对复杂系统还是OOP的方式更易于维护
    zieglar
        18
    zieglar  
    OP
       2012-08-25 22:49:56 +08:00
    @ljbha007 嗯。。。是的,play有点脱离OOP,看来我还是好好捣腾下NodeJS好了:)
    donnior
        19
    donnior  
       2012-08-26 00:04:49 +08:00
    @zieglar
    @ljbha007
    Play这个static确实是有点不爽,不过也不至于那么多吧,除了web层的之外,业务层的代码原来怎么写还可以怎么写啊。实在不行可以使用scala写play,兼顾了动态语言的优点,然后相比java也没有性能损失。

    考虑到楼主这个应用只是需要提供API,其实选择就可以更多了,即使使用java的话也可以直接考虑JAX-RS的实现而不需要web层的内容

    用Rails的话确实很快,尤其是只提供api的时候太方便了,我现在的项目就是这样做的(因为是初期,把可能的性能问题放后边了)

    至于Nodejs,我对它只是十分肤浅的了解了一下,也想跟熟悉几种技术的朋友们探讨下,我个人觉得nodejs现在是否有过于强调其性能的嫌疑而忽略了其他一些不方便的地方?比如受限于javascript简陋的语法,很多时候跟别的语言相比确实相对难用些?
    ljbha007
        20
    ljbha007  
       2012-08-26 08:42:11 +08:00
    @donnior javascript的确有可能写出让人难以阅读的代码 并且难以统一编码风格

    不过这个问题是有解决办法的,那就是使用coffeescript

    用coffeescript之后,语法就跟python和ruby很类似,并且强制统一了编码风格。唯一不方便的是调试的时候,调试的实际上是编译出来的javascript
    amtb
        21
    amtb  
       2012-08-26 10:05:19 +08:00
    @ljbha007 play本身就是为了快速开发web应用而非复杂业务应用,另外play的问题在于数据库支持比较弱,如果多数据库的话,很麻烦
    amtb
        22
    amtb  
       2012-08-26 10:09:26 +08:00
    @zieglar play如果不渲染页面的话,性能不是问题而且实现和可维护个人感觉都比node要好
    superisaac
        23
    superisaac  
       2012-08-26 11:58:39 +08:00
    bottle吧,简单,其实http协议就是个简单的东西,不需要那么多的所谓框架。
    heroicYang
        24
    heroicYang  
       2012-08-26 12:17:18 +08:00
    @zhouyang 这个回答好~
    zieglar
        25
    zieglar  
    OP
       2012-08-26 15:15:11 +08:00
    @amtb 但是不仅要考虑现在提供api的问题,后期还要重构网站,所以还要为这一步考虑
    remaerd
        26
    remaerd  
       2012-08-27 02:34:46 +08:00
    @zieglar 我也困惑过这个问题。当初的架构是这样的:有一个 API 服务器,专门处理 REST API,iOS 和 Web 端都通过他来访问数据。

    考虑再三之后,像我这样的独立开发者,亦不打算找任何投资,费用应该越少越好。如果专门搭 API 服务器,数据库/API/iOS/网站之间的内部数据流量就会成为一笔很麻烦的费用。

    你或许不知道,其实 CouchDB,MongoDB 等 NoSQL,都是具有 HTTP 接口的。这意味着,你的 iOS 客户端可以直接访问数据库,不需要另外搭建 REST API 服务器。你现在可以考虑只做数据库和 iOS,后期再考虑用 后端 + HTML5 搭建网站客户端。

    我的项目比较特殊,iOS 端不需要进行用户验证,也没有任何 CUD 的操作,只需要从数据库获取资讯,所以我刚才说的解决办法比较适合我的项目。就算你要进行 CRUD,这些 NoSQL 也提供了 REST API 接口。问题不是很大。
    chuck911
        27
    chuck911  
       2012-08-27 12:10:33 +08:00
    你要是跟一个IT男搭讪,提这个问题不错
    在“需求比较急”的情况下问这个,简直就是扯蛋,是在释放压力么?
    连php框架都‘不屑’用,还express rails django bottle,简直就是没话找话
    祝你们成为好基友
    zack
        28
    zack  
       2012-08-27 12:17:40 +08:00
    感觉看着有点困惑了,到底是做一个数据源的服务,还是要做个网站?这两个不能相提并论的。

    首先要考虑清楚到底是iOS上Tcp based app还是Http based app。这个没定对的话,后面的那些讨论就都是乱来的了。
    feihu
        29
    feihu  
       2012-08-27 12:40:02 +08:00
    没用过node.js,但是看一些ppt,一般都建议node.js适用与实时性的社交应用比较多,它的用法与其他的不太一样。而且它的调优不好调,见过使用dtrace来调优的,看了两下就晕了。先确定你的app是做什么用的吧。然后在选择对应的语言
    forest520
        30
    forest520  
       2012-08-27 12:49:34 +08:00
    @amtb 请问,play渲染页面的性能有什么问题?
    zieglar
        31
    zieglar  
    OP
       2012-08-27 16:38:03 +08:00
    @chuck911 …是我自己开发,你这回答的有些不知所云
    zieglar
        32
    zieglar  
    OP
       2012-08-27 16:39:20 +08:00
    @zack 是基于网站数据的一个应用,应该是要基于http based
    zack
        33
    zack  
       2012-08-27 18:12:24 +08:00
    @zieglar 我不知道你要做的具体应用的类型,但我建议数据的传输优先考虑下基于TCP sockets的方式。实际上现在很多应用都是如此的吧。

    这有几个很明显的好处:

    1. 数据传输量可以精简很多,只发送需要的数据即可。在数据包上可做的优化很多。
    2. 客户端不需要用Poll的方式去持续更新数据,只要连接建立了,数据传输的时机很好控制。
    3. sockets server是独立的,不用依赖于网站的web server。

    你要写一个TCP Server的话可以考虑用Python的Twisted,当然,用Erlang和Nodejs也非常简单。但后两者在处理数据库接口和一些业务逻辑方面,可能不如Python更快能上手。

    如果是要做一个网站的话,再去考虑那些Web框架吧,做一个数据服务的接口跟那个关系不大,而且TCP Server其实比你去用做网站的方式去做个类似RESTful的接口,开发和维护的代价我觉得还要更少。

    个人意见,供你参考。最终还是取决于你要做的东西的实际情况而定。
    zieglar
        34
    zieglar  
    OP
       2012-08-27 18:54:26 +08:00
    @zack 谢谢你的解答,很详细,不过因为我的基础不是很好,所以如何搭建一个TCP Server恐怕还要好好补课:)看那边能给我多少时间吧
    PrideChung
        35
    PrideChung  
       2012-08-27 23:38:53 +08:00
    晕,TCP都出来了,楼主的要求是后期要把网站推翻,那么使用RESTful的API可以让网站复用代码,TCP就没那么简单了。不用把摊子摆那么大吧,就用最熟悉的PHP先把原型做出来好了。
    Demo or nothing.
    amtb
        36
    amtb  
       2012-08-28 08:52:13 +08:00
    @forest520 play是用groovy的模板,性能上比jsp有损失,具体看这里http://www.jtict.com/blog/rails-wicket-grails-play-lift-jsp/
    forest520
        37
    forest520  
       2012-08-28 09:17:30 +08:00
    amtb
        38
    amtb  
       2012-08-28 11:51:32 +08:00
    @forest520 play2要慎用,跟play1是完全两个东西。
    PrideChung
        39
    PrideChung  
       2012-09-05 20:56:07 +08:00
    LZ最后选了啥?八卦下。
    120066825
        40
    120066825  
       2013-04-26 17:55:05 +08:00
    推荐使用JAVA,现在很多程序员都能JAVA web轻松搞定需求 , 且JAVA程序员多 , 框架可以单采用struts2 , 只是JAVA写出来的项目的缺点也很明显:可维护性差 . 不过后来的运维和二次开发工作可以交给别的语言进行例如(node等) , 随着单提升主机的性能和增加主机集群数目 , 可以不用发愁便能解决掉性能问题 . 相当于魔兽里人族的万金流 .其实就语言来说,JAVA跟其他语言go语言什么的比起来弱爆了.
    zieglar
        41
    zieglar  
    OP
       2014-06-27 16:26:11 +08:00
    @PrideChung 回来节帖,当年项目最后用到了 Node.js,采用的是 Express.js 3.X 框架,但是 Express.js 有挺大的坑,目前已经不在原来的公司,新公司的服务器同样采用的 Node.js,框架是 Sails.js,基于 Express.js 扩展的,但是好用多了。
    PrideChung
        42
    PrideChung  
       2014-06-27 16:42:35 +08:00
    @zieglar 这就两年了?我的人参呢?Express有啥坑,我只用来写过很小的服务(代码100行以内),没什么体会
    zieglar
        43
    zieglar  
    OP
       2014-06-27 16:46:09 +08:00
    @PrideChung 长时间运行以后响应会有阻塞,这个在我原来写的代码和现在公司原来外包的代码里面都有出现过,不知道是不是我们代码水平的问题(
    PrideChung
        44
    PrideChung  
       2014-06-27 16:54:23 +08:00
    @zieglar 可能是哪里用了阻塞的API吧,被你这么一说我就去看了下Sails.js了。
    WallaceYYLi
        45
    WallaceYYLi  
       2017-08-15 14:40:23 +08:00
    居然知道节贴,赞一个👍
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3522 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 35ms · UTC 10:51 · PVG 18:51 · LAX 03:51 · JFK 06:51
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.