类似于共享单车这种很多设备通过 TCP Socket 连接服务器,向服务器发送数据的场景,服务器该如何处理?

2017-04-07 16:31:52 +08:00
 qiayue
而且为了能够通过服务器下发命令到设备,以及为了设备能够实时传数据到服务器,连接都是长连接,并不是用完就关。
我现在用的方式是,来一个设备就开一个线程去处理,但是这样设备一多,内存占用就多。
我服务器用的是 JAVA 开发的 Socket Server 。
求思路,求框架。
9035 次点击
所在节点    问与答
28 条回复
wwqgtxx
2017-04-08 02:05:10 +08:00
@t123yh 主要是必要性问题,在那种小内存,低速率的机器上实现 http 协议还不如在服务器上下功夫
另外就是标准 http1.1 协议并不支持服务端主动推送消息,如果要自己实现类似于 websocket 协议的话,干嘛不直接用 socket 来的省事
@ryd994 用 http 还有个小的蛋疼的问题,就是 http 的无状态性,换句话说如果用 http 通讯那么每次通讯必须带上机器的唯一编号,否则服务器根本没法识别客户端的对应关系,然后就需要在服务器端自己维持一个 session 池,这个工作貌似有点重复造轮子的感觉
ryd994
2017-04-08 02:05:57 +08:00
@qiayue 那就上 polling 呗
不过再提醒一下,数据断了的话,只要服务器没有主动发数据,连接表面上还是连着,你都不知道什么时候会报断开
所以 keepalive 还是要开
移动网络上的长连接……相当不靠谱
loading
2017-04-08 07:12:52 +08:00
有用短信的……
TangMonk
2017-04-08 07:55:30 +08:00
Erlang 开源项目: http://emqtt.io
firefox12
2017-04-08 14:48:16 +08:00
实现 http 并不难,你并不需要实现 http 的所有特性。如何节省电量,保持信道不被释放 减少重连才是关键 这些坑 微信都已经走过了
firefox12
2017-04-08 14:49:36 +08:00
至于连接数什么的也并不难,单机 2 百万的话,现在的摩拜 不用 3 台服务器就够了
ihuotui
2017-04-08 16:30:39 +08:00
tdp 吧,协议复杂点了
julyclyde
2017-04-09 16:09:54 +08:00
@server 跟 GPS 有啥关系

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/353250

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX