android,心跳,服务器,来android大神,最好是懂服务器的,没找到合适的板块发,只好来这里了

酒笑生 2014-01-07 03:18:43
现在小弟要做一个用于android心跳的服务器,tcp,5分钟,目前只用mina框架写了个demo。问题如下
我们是个小公司,却有着大梦想(你懂的),所以希望服务器能维持尽量多的长连接,可我压根儿不知道该从哪里下口!
求有经验的前辈,有知识的同行,有见地的高知们给点思路,分不多都散了
...全文
365 28 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
28 条回复
切换为时间正序
请发表友善的回复…
发表回复
bluefoxah 2014-07-09
  • 打赏
  • 举报
回复
我们目前是20W长连接!
  • 打赏
  • 举报
回复
这架势貌似是要做开放的推送服务,,
Birds2018 2014-01-08
  • 打赏
  • 举报
回复
引用 22 楼 shumozhisi 的回复:
[quote=引用 21 楼 birdsaction 的回复:] 长连接其实不需要知道客户端的IP,因为一直连着 服务器和客户端是一条链子困在一起的。 如果断开了,客户端需要主动练服务器,再次建立,然后长期保持不断开 就OK。 如果做推送 需要阻塞服务器的线程,这样服务器发现有数据可以立即发送给客户端,但需要阻塞服务器端的线程,这样的话 一般一台电脑开5000个线程阻塞 就差不多了(根据一般的硬件配置)。 http://blog.csdn.net/birdsaction/article/details/12612441
首先谢谢你的耐心回复,我头儿想要把客户端的地址存数据库,有一个服务器专门做心跳,保持长连接,要推送消息时去数据库取地址再发送,这样可行吗?我总觉得这样哪里不太对,是吗?[/quote] 客户端的地址是固定的那就可以,如果取到地址再发送 问题是客户端也需开启一个服务用于接收请求。
酒笑生 2014-01-08
  • 打赏
  • 举报
回复
引用 21 楼 birdsaction 的回复:
长连接其实不需要知道客户端的IP,因为一直连着 服务器和客户端是一条链子困在一起的。 如果断开了,客户端需要主动练服务器,再次建立,然后长期保持不断开 就OK。 如果做推送 需要阻塞服务器的线程,这样服务器发现有数据可以立即发送给客户端,但需要阻塞服务器端的线程,这样的话 一般一台电脑开5000个线程阻塞 就差不多了(根据一般的硬件配置)。 http://blog.csdn.net/birdsaction/article/details/12612441
首先谢谢你的耐心回复,我头儿想要把客户端的地址存数据库,有一个服务器专门做心跳,保持长连接,要推送消息时去数据库取地址再发送,这样可行吗?我总觉得这样哪里不太对,是吗?
Birds2018 2014-01-08
  • 打赏
  • 举报
回复
长连接其实不需要知道客户端的IP,因为一直连着 服务器和客户端是一条链子困在一起的。 如果断开了,客户端需要主动练服务器,再次建立,然后长期保持不断开 就OK。 如果做推送 需要阻塞服务器的线程,这样服务器发现有数据可以立即发送给客户端,但需要阻塞服务器端的线程,这样的话 一般一台电脑开5000个线程阻塞 就差不多了(根据一般的硬件配置)。 http://blog.csdn.net/birdsaction/article/details/12612441
Birds2018 2014-01-08
  • 打赏
  • 举报
回复
检测是否心跳结束 最简单的方法就是尝试发送一个字节的数据,如果异常就表示断开了。 有点轮转的意思。
媒体盒子 2014-01-08
  • 打赏
  • 举报
回复
引用 18 楼 shumozhisi 的回复:
引用 15 楼 luowenlong860502 的回复:
[quote=引用 14 楼 shumozhisi 的回复:] [quote=引用 13 楼 luowenlong860502 的回复:] [quote=引用 4 楼 shumozhisi 的回复:] [quote=引用 3 楼 luowenlong860502 的回复:] 想维持比较多的连接 最好用短连接,这是经验之谈
android的心跳,之前是用的udp,但是这没法做消息推送,只能客户端主动去轮寻,所以要用长链接,那别的方面您还有经验可以分享下吗?
我们是这样做的,在客户端(android)上面建立TCP的监听,然后server主动连客户端进行推送,客户端要连接服务端的话也是服务端有监听,客户端主动连,不用了立马断开,这样就能解决荷载重的问题[/quote]客户端连服务器时倒是好说,因为服务器地址固定的,但是您说的服务器要推送时,主动去连客户端,可是客户端地址不是固定的,怎么连?[/quote] 客户端连服务器时服务器记录客户端的IP地址[/quote]android在没有WIFI的情况下,地址很快就会变的[/quote] 首先,肯定是确保有网络的情况下客户端和服务器才能通信,所以肯定是需要你客户端在本地的IP变化后都需要主动通知服务器的
酒笑生 2014-01-08
  • 打赏
  • 举报
回复
引用 15 楼 luowenlong860502 的回复:
引用 14 楼 shumozhisi 的回复:
[quote=引用 13 楼 luowenlong860502 的回复:] [quote=引用 4 楼 shumozhisi 的回复:] [quote=引用 3 楼 luowenlong860502 的回复:] 想维持比较多的连接 最好用短连接,这是经验之谈
android的心跳,之前是用的udp,但是这没法做消息推送,只能客户端主动去轮寻,所以要用长链接,那别的方面您还有经验可以分享下吗?
我们是这样做的,在客户端(android)上面建立TCP的监听,然后server主动连客户端进行推送,客户端要连接服务端的话也是服务端有监听,客户端主动连,不用了立马断开,这样就能解决荷载重的问题[/quote]客户端连服务器时倒是好说,因为服务器地址固定的,但是您说的服务器要推送时,主动去连客户端,可是客户端地址不是固定的,怎么连?[/quote] 客户端连服务器时服务器记录客户端的IP地址[/quote]android在没有WIFI的情况下,地址很快就会变的
酒笑生 2014-01-08
  • 打赏
  • 举报
回复
引用 9 楼 sinom 的回复:
你们现在能有多少客户同时在线?一般的服务器只要服务端与客户端写得不太糟糕,同时在线1K没什么问题的
1k,其实我们现在一个用户都还没有,但是我头儿肯定不会满足1K这个数字的,据说极光推送能到达峰值300W,1K实在太小了
酒笑生 2014-01-08
  • 打赏
  • 举报
回复
引用 10 楼 birdsaction 的回复:
维持更多的连接 1. 要有较好的硬件系统,内存,CPU, 操作系统 64位 2. apache mina并没有限制多少个连接数,如果要保存所有的mina 客户端session 需要及时释放断开的session,减少资源消耗,提高性能。
请问下,您是怎么做到判断session是否失效了呢,是用mina自带的sessionClosed这个方法?顺便问下,我们有台Intel(R) Xeon(R) CPU E5-2407 0 @ 2.20GHz 4核 8G内存的服务器,您觉得最多能同时维持多少用户,一台,再问点,你有经验,我多问点,操作系统上有需要设置或者做的吗?会不会有连接数限制,而且我们的服务器是双网卡,这个可以利用吗?
媒体盒子 2014-01-08
  • 打赏
  • 举报
回复
引用 14 楼 shumozhisi 的回复:
引用 13 楼 luowenlong860502 的回复:
[quote=引用 4 楼 shumozhisi 的回复:] [quote=引用 3 楼 luowenlong860502 的回复:] 想维持比较多的连接 最好用短连接,这是经验之谈
android的心跳,之前是用的udp,但是这没法做消息推送,只能客户端主动去轮寻,所以要用长链接,那别的方面您还有经验可以分享下吗?
我们是这样做的,在客户端(android)上面建立TCP的监听,然后server主动连客户端进行推送,客户端要连接服务端的话也是服务端有监听,客户端主动连,不用了立马断开,这样就能解决荷载重的问题[/quote]客户端连服务器时倒是好说,因为服务器地址固定的,但是您说的服务器要推送时,主动去连客户端,可是客户端地址不是固定的,怎么连?[/quote] 客户端连服务器时服务器记录客户端的IP地址
酒笑生 2014-01-08
  • 打赏
  • 举报
回复
引用 13 楼 luowenlong860502 的回复:
引用 4 楼 shumozhisi 的回复:
[quote=引用 3 楼 luowenlong860502 的回复:] 想维持比较多的连接 最好用短连接,这是经验之谈
android的心跳,之前是用的udp,但是这没法做消息推送,只能客户端主动去轮寻,所以要用长链接,那别的方面您还有经验可以分享下吗?
我们是这样做的,在客户端(android)上面建立TCP的监听,然后server主动连客户端进行推送,客户端要连接服务端的话也是服务端有监听,客户端主动连,不用了立马断开,这样就能解决荷载重的问题[/quote]客户端连服务器时倒是好说,因为服务器地址固定的,但是您说的服务器要推送时,主动去连客户端,可是客户端地址不是固定的,怎么连?
媒体盒子 2014-01-08
  • 打赏
  • 举报
回复
引用 4 楼 shumozhisi 的回复:
引用 3 楼 luowenlong860502 的回复:
想维持比较多的连接 最好用短连接,这是经验之谈
android的心跳,之前是用的udp,但是这没法做消息推送,只能客户端主动去轮寻,所以要用长链接,那别的方面您还有经验可以分享下吗?
我们是这样做的,在客户端(android)上面建立TCP的监听,然后server主动连客户端进行推送,客户端要连接服务端的话也是服务端有监听,客户端主动连,不用了立马断开,这样就能解决荷载重的问题
酒笑生 2014-01-08
  • 打赏
  • 举报
回复
引用 24 楼 wula0010 的回复:
干嘛要长连接啊?推送,只是一种表现而已,你每5分钟轮寻一次,效果就和推送差不多,又不是即时通讯,qq需要长连接,一般的完全没必要...............
是做即时消息啊,我这里说的推送,是说服务器推送一个消息给客户端,这个消息就是即时的消息,所以还是有必要的,不死推送广告那种推送
wula0010 2014-01-08
  • 打赏
  • 举报
回复
你所说的极光推送的原理:http://blog.csdn.net/xieebajinzhi/article/details/9445281,最多也就每台服务期300万连接,你要是有1亿的用户,要30台服务器,还得有备机,数据库服务器,负载均衡服务器,...........
wula0010 2014-01-08
  • 打赏
  • 举报
回复
干嘛要长连接啊?推送,只是一种表现而已,你每5分钟轮寻一次,效果就和推送差不多,又不是即时通讯,qq需要长连接,一般的完全没必要...............
aSysBang 2014-01-07
  • 打赏
  • 举报
回复
必须完全重新写吗?在其他服务器上改不行吗? Openfire,ejabberd 这些并发数都很高的
Birds2018 2014-01-07
  • 打赏
  • 举报
回复
我之前做的apache mina长连接, 同时维持3000用户长连接 都没问题。
Birds2018 2014-01-07
  • 打赏
  • 举报
回复
维持更多的连接 1. 要有较好的硬件系统,内存,CPU, 操作系统 64位 2. apache mina并没有限制多少个连接数,如果要保存所有的mina 客户端session 需要及时释放断开的session,减少资源消耗,提高性能。
LichKingSZ 2014-01-07
  • 打赏
  • 举报
回复
你们现在能有多少客户同时在线?一般的服务器只要服务端与客户端写得不太糟糕,同时在线1K没什么问题的
加载更多回复(8)

80,471

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧