给iOS程序提供数据的服务器端采用什么开发更好?RoR、PHP、Java还是Node.js - V2EX
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 17530 次点击
    这是一个创建于 4856 天前的主题,其中的信息可能已经有所发展或是发生改变。
    服务器上本身的网站程序比较烂,不提供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     Solana   &nbs; 5195 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 36ms UTC 08:36 PVG 16:36 LAX 00:36 JFK 03:36
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86