1
opengps 2018-06-05 07:54:40 +08:00 via Android
这 9 字节是携带信息的心跳数据吗?客户端应当失败多少次重新建立连接(公网质量很差,必须的操作)。服务端应当失败多少次踢出这条链接
|
2
CrisTao 2018-06-05 09:30:04 +08:00
socket 通信的话 netty 了解一下,表示我这就是用 netty+protobuf 做的 im
自己写的话就开个线程去跑轮询吧 |
3
momocraft 2018-06-05 09:49:45 +08:00 1
> 为什么每次建立连接之后只能获取一次数据
从描述猜不出你做了什么,遇到了什么 > 客户端是不是必须在死循环里边去获取数据 不是。这只是最简单的方式,这个搞不定不必急着想别的。 |
4
xuhaoyangx 2018-06-05 10:03:23 +08:00
@CrisTao #2 netty9 不是得 jdk7 吗,得 android 4.3 以上
|
5
deadEgg 2018-06-05 10:13:07 +08:00
长连接不会是只获取一次数据。
检查一下通信的时候是服务器断开了还是客户端断开了? 还是说操作逻辑上有问题。 |
6
shyrock 2018-06-05 10:30:35 +08:00
只说 socket。。。到底是 tcp 还是 udp 啊,同步还是异步啊。。。
|
7
CrisTao 2018-06-05 11:08:27 +08:00
@xuhaoyangx #4 什么? netty 出到 9 了?我这最新也才是 4.1.25 的包,而且 netty 是 java 的 nio 框架,对 android 版本没要求的
|
8
yazheng 2018-06-05 11:32:15 +08:00
只获取一次数据?连接之后就断了吗
|
9
zhangdawei 2018-06-05 13:57:06 +08:00
@CrisTao 感觉 Android 的 socket 通信就上 netty,是不是有点重了,
tcp 和 udp 都用过,没啥问题吧 |
10
CrisTao 2018-06-05 14:19:01 +08:00
@zhangdawei #9 emmm,要是对 apk 大小有要求的话,netty 确实有点重,毕竟一个 all jar 有 3M 左右去了
我这边目前是用的 tcp,毕竟用 udp 做 im 稳定性实在不好把控 |
11
xuhaoyangx 2018-06-05 15:02:06 +08:00
@CrisTao #7 sorry 看错了-。-
|
12
bhagavad 2018-06-05 21:22:15 +08:00 1
先回答你的问题:
1、Android 客户端在工作线程中每隔 1s 去获取流数据。为什么每次建立连接之后只能获取一次数据? 答:你理解错误,并不是每次连接建立后只能获取一次数据。 2、客户端是不是必须在死循环里边去获取数据? 答:不是。 socket 狭义来讲,仅是一组 interface ;广义上来讲是一组工具,这组工具实现了上述的 interface,方便用来操作 tcp / udp。 拿 tcp 来举例,连接建立需要三次握手,连接关闭需要四次挥手。连接建立后,你就可以收发数据,所以这条连接是可以被一直使用的,并不需要每次都建立一个新连接(特殊需求另说)。 关于轮询方式,也有很多种,像 select、poll、epoll 等,至于区别,楼主可以直接 google。搞个线程死循环去读取数据,是最暴力的方式,楼主可以查询一下上述轮询的区别,然后按照自己需求选用。 |