而且为了能够通过服务器下发命令到设备,以及为了设备能够实时传数据到服务器,连接都是长连接,并不是用完就关。
我现在用的方式是,来一个设备就开一个线程去处理,但是这样设备一多,内存占用就多。
我服务器用的是 JAVA 开发的 Socket Server 。
求思路,求框架。
我现在用的方式是,来一个设备就开一个线程去处理,但是这样设备一多,内存占用就多。
我服务器用的是 JAVA 开发的 Socket Server 。
求思路,求框架。
1
manhere Apr 7, 2017 可以参考下推送系统的做法
|
2
zts1993 Apr 7, 2017 搜 非阻塞 IO
java 的话 先看 NIO 然后 netty 这样的框架。。 一个连接一个线程是不行的。。。。。。。。。。。。 |
3
fyyz Apr 7, 2017 via Android 异步非阻塞 io
|
4
tabris17 Apr 7, 2017 java 用 Netty 或者 Vert.x
|
5
zonghua Apr 7, 2017 via iPhone 用 Netty 实现 MQTT 协议
|
6
wwqgtxx Apr 7, 2017 via iPhone java 用 netty , golang 直接用 goroutine , python 用 gevent 或者 tornado
|
7
VicYu Apr 7, 2017
然后在 actor 化, 进入邪教
|
8
shoaly Apr 7, 2017
如果不是 "真实时" 消息, http 维护成本低太多了.
|
11
cevincheung Apr 7, 2017
-_- 现在单车都开始锁上加联网模块了吗?怎么联网的? GSM ?
|
12
yangff Apr 7, 2017 via Android
@cevincheung 4g 吧
|
13
bianhua Apr 7, 2017
@t123yh
其实是这样的:如果用 TCP 先实现个 HTTP 客户端(哪怕就是读连续两个\r\n ,完全不解析头,拿 FIN 当 EOF ),然后再在 HTTP 上实现类似 Websocket/Comet 的东西,肯定不如直接拿 TCP 传递通知方便+效率高,何况这可能是在单车附加的设备上。 |
14
qiayue OP @cevincheung 4G 物联网卡,但是你硬件里的上网模块可以用 4G 的也可以用 2G 的。
移动的卡, 500M 流量, 5~9 块钱,看你拿的量多少 |
16
server Apr 7, 2017
有个东西 叫 gps
|
17
ryd994 Apr 7, 2017 via Android
关键是 event driven ,用 nio
楼上说 http 也并非没有道理, HTTP 的话就可以让 HTTP 服务器在前面挡并发连接。至少 Nginx 是个现成的 event driven 。你的程序可以忽略网络部分。部分实现一个 HTTP/0.9 协议栈其实很简单,你只要保证自己能和自己的服务器通讯就好。 最后,如果不是对实时性有高要求,也没有高频率的消息,真的没有必要长连接。否则客户端光是维持连接的流量就已经不少了。要么你别开 keepalive ,加大 timeout ,明显也不可取。 |
18
qiayue OP |
21
wwqgtxx Apr 8, 2017 via iPhone
|
22
ryd994 Apr 8, 2017 via Android
@qiayue 那就上 polling 呗
不过再提醒一下,数据断了的话,只要服务器没有主动发数据,连接表面上还是连着,你都不知道什么时候会报断开 所以 keepalive 还是要开 移动网络上的长连接……相当不靠谱 |
23
loading Apr 8, 2017 via Android
有用短信的……
|
24
TangMonk Apr 8, 2017 via Android
Erlang 开源项目: http://emqtt.io
|
25
firefox12 Apr 8, 2017 via iPhone
实现 http 并不难,你并不需要实现 http 的所有特性。如何节省电量,保持信道不被释放 减少重连才是关键 这些坑 微信都已经走过了
|
26
firefox12 Apr 8, 2017 via iPhone
至于连接数什么的也并不难,单机 2 百万的话,现在的摩拜 不用 3 台服务器就够了
|
27
ihuotui Apr 8, 2017 via iPhone
tdp 吧,协议复杂点了
|