V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
yejinmo
V2EX  ›  问与答

求问一个服务端架构的问题。。。

  •  
  •   yejinmo · 2016-06-23 12:38:38 +08:00 · 2332 次点击
    这是一个创建于 3100 天前的主题,其中的信息可能已经有所发展或是发生改变。
    正在做一个 校园助手 性质的 APP ,内含可以查询教务信息、电费、一卡通、图书馆等一些信息的功能模块

    问题:

    现在用的是:

    客户端与服务端建立 Tcp 长连接,进行消息查询及推送

    但总觉得用 Tcp 长连接传送数据怪怪的,求问下应该使用什么方法。。

    现架构如下图所示:

    25 条回复    2016-06-24 08:52:00 +08:00
    qcloud
        1
    qcloud  
       2016-06-23 13:23:21 +08:00
    我看到你在用 XX 云,我就知道这款 app💊
    qcloud
        2
    qcloud  
       2016-06-23 13:23:57 +08:00
    你这个图是用什么做的
    manhere
        3
    manhere  
       2016-06-23 13:28:20 +08:00 via iPhone
    适合做成微信公众号
    Muninn
        4
    Muninn  
       2016-06-23 13:43:55 +08:00
    现在大家都是用 restful API 的
    不过是单向的 你需要客户端定时检查消息
    或者用某些推送框架
    yejinmo
        5
    yejinmo  
    OP
       2016-06-23 13:48:22 +08:00   ❤️ 1
    @qcloud XX 云便宜啊 = =

    图是用 Office Visio 做的

    yejinmo
        6
    yejinmo  
    OP
       2016-06-23 13:48:43 +08:00
    @manhere 不想做微信端。。功能太少 UI 不好看 = =
    yejinmo
        7
    yejinmo  
    OP
       2016-06-23 13:49:30 +08:00
    @Muninn 没有听说过。。查一查去。。。
    zhgg0
        8
    zhgg0  
       2016-06-23 14:12:20 +08:00
    用第三方推送
    yejinmo
        9
    yejinmo  
    OP
       2016-06-23 14:12:48 +08:00
    @Muninn 感觉这个技术跟 CGI 区别不是很大啊 = =
    visonme
        10
    visonme  
       2016-06-23 14:18:38 +08:00   ❤️ 1
    推送模块长连接我可以理解,但是查询模块都用长连接,费解,不知道是不是有特别的目的。
    这种应用后端直接 restful api + websocket 就可以了
    zjqzxc
        11
    zjqzxc  
       2016-06-23 15:53:24 +08:00
    实时性不强,还有 web 端

    考虑每小时(或者 10 分钟或者半小时)让客户端发送一个 http 请求来问问服务器有没有新消息
    用 http 能解决的事儿,没必要自己维持 tcp 连接。
    zrp1994
        12
    zrp1994  
       2016-06-23 17:04:22 +08:00
    血与泪的教训:自己做项目千万别自己设计 TCP 协议,就算要用也不要用长连接。
    还有阿里云能直接访问到校园网服务端么?
    其他架构看着还行。
    yejinmo
        13
    yejinmo  
    OP
       2016-06-23 17:32:05 +08:00
    @zhgg0
    @visonme
    不仅仅是有推送,主要是还要提交数据啊。。之前用过 CGI ,效率太低了。。
    看了看 WCF ,感觉还可以。。
    yejinmo
        14
    yejinmo  
    OP
       2016-06-23 17:35:20 +08:00
    @zrp1994
    阿里云上边只扔了个前端服务器,只起个中转消息、分发任务的作用,逻辑在校内,向中转发起主动连接。。。不过被信息中心谈话了,说要封掉所有类似未备案的主动连接 = =
    alex321
        15
    alex321  
       2016-06-23 17:39:15 +08:00
    现在这些人啊,为了 APP 而 APP 。。。。一个 APP 的下载装机成本那么高,相比之下寄生在微信公众号或者支付婊的服务窗成本却是那么那么的低啊。
    yejinmo
        16
    yejinmo  
    OP
       2016-06-23 17:40:07 +08:00
    @zjqzxc
    想过用轮询。。考虑时效问题一分钟就得轮一次。。即使只有一千用户这样子轮再加上正常请求前端服务器只有一台,还要负责反序列和解密,开销太大了。。。
    zhgg0
        17
    zhgg0  
       2016-06-23 17:46:23 +08:00
    需要服务器通知客户端的才用第三方推送。
    其它的提交信息、查询什么的就走普通 http 请求 get 、 post 、 put 就好了。压根不需要写什么 tcp 长连接传数据啊啊。
    boyhailong
        18
    boyhailong  
       2016-06-23 18:07:37 +08:00
    明显不需要长连接。。。。 最简单的就是 http 噻
    mornlight
        19
    mornlight  
       2016-06-23 18:17:41 +08:00
    没有看出来那个地方是必须要用 TCP 连接去做的,更何况 iOS 设备上的通知你不走 Apple 的推送渠道根本没可能在 App 关掉后推送消息。
    客户端主动发起的查询操作应该走 HTTP 。
    zrp1994
        20
    zrp1994  
       2016-06-23 19:03:17 +08:00
    @yejinmo 不允许主动连接,那允许反向代理么?
    felixzhu
        21
    felixzhu  
       2016-06-23 19:06:32 +08:00
    最简单的 Restful API 分分钟搞定,,怎么搞这么复杂。
    imNull
        22
    imNull  
       2016-06-24 00:15:17 +08:00 via Android
    @alex321 这个问题我也想过。我也是做类似 LZ 的,打算作为毕设,可只做出个微信服务号感觉那帮老师也不大看好,于是就想用 React Native 简单做个 App 。我个人还是倾向于做成微信服务号,可以利用客服接口推送,简单高效。
    alex321
        23
    alex321  
       2016-06-24 08:18:07 +08:00   ❤️ 1
    @imNull 毕设这个主要看老师们的胃口。如果老师们比较开明开放的日化,可以考虑 WebAPP ,用微信公众号的消息模板,可以规避客服消息的 48 小时限制,相比 APP 的开发成本要低很多。
    开发者申请的测试公众号虽然是订阅号,但消息模板, jssdk 这些功能都有,虽然相比正式的简陋了一些,但做毕设的示例可以满足。如果真的要打算将毕设作为正经项目,建议找资质申请服务号。
    imNull
        24
    imNull  
       2016-06-24 08:22:24 +08:00
    @alex321 嗯,已经申请并认证,不仅仅是毕设,也算是留给这个学校的一点点我的“作品”吧。感谢你的建议。
    zjqzxc
        25
    zjqzxc  
       2016-06-24 08:52:00 +08:00
    @yejinmo 时效性并用不着 1 分钟一次, 1 小时 1 次都绰绰有余。。
    tcp 长连接开销更大;即使是 1000 用户一分钟一次每秒并发平均也就不到 20 ;而且这个轮询只是个心跳包,构造一个队列,每次返回值只是有新消息或者没有新消息,如果有新消息再调用一个相应的接口来处理,没有就忽略。
    应用层协议能解决的问题,没必要回落到传输层解决
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1026 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 20:07 · PVG 04:07 · LAX 12:07 · JFK 15:07
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.