![]() | 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 ![]() > 为什么每次建立连接之后只能获取一次数据 从描述猜不出你做了什么,遇到了什么 > 客户端是不是必须在死循环里边去获取数据 不是。这只是最简单的方式,这个搞不定不必急着想别的。 |
![]() | 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、Android 客户端在工作线程中每隔 1s 去获取流数据。为什么每次建立连接之后只能获取一次数据? 答:你理解错误,并不是每次连接建立后只能获取一次数据。 2、客户端是不是必须在死循环里边去获取数据? 答:不是。 socket 狭义来讲,仅是一组 interface ;广义上来讲是一组工具,这组工具实现了上述的 interface,方便用来操作 tcp / udp。 拿 tcp 来举例,连接建立需要三次握手,连接关闭需要四次挥手。连接建立后,你就可以收发数据,所以这条连接是可以被一直使用的,并不需要每次都建立一个新连接(特殊需求另说)。 关于轮询方式,也有很多种,像 select、poll、epoll 等,至于区别,楼主可以直接 google。搞个线程死循环去读取数据,是最暴力的方式,楼主可以查询一下上述轮询的区别,然后按照自己需求选用。 |