java 长连接实现_java怎么实现长连接

Java简单实现长连接很简单, 实现一些回调机制就可以了. 问题是Java如何设计一个生产环境下可用的长链接, 不是代码测试通过了就可以上线的.

想要完美的解决这个问题, 你需要一个支持单线程异步的编程框架, Java一定写的出来(或许已经有人写出来了但是我还不知道)

在标准的 Apache + mod_php 环境中也可以通过 sleep 来模拟出需要过很久才 response 返回的http请求, 很简单. 但是在生产环境的 PHP 中使用 sleep 无异于自杀. apache php 的多进程意味着你有多少个请求就需要开多少个进程, 或者再退一步 多进程+多线程. 无论哪种方法, 你的CPU将处于疯狂的任务切换中, 实际上并没有干多少活确被活活累死了.

所以在这种事实面前, 你需要了解你的Java代码当前的运行模式, 长链接面前, 多线程是不可取的.

早期的 python 世界尝试解决这样的问题, 动用了stackless python的微线程, 后来tornado框架采用纯异步编程的方式一样解决了这个问题, 无需hack python本身.

另外一方面, erlang 也利用自身的微线程特性实现了超高的并发连接数.

node.js 的方式和 tornado 很像, 单线程异步.

go语言也类似, 利用了异步方式解决了问题.

所以问题又回到Java, 如何在实战中支持长链接, 取决于你如何使用CPU, 是采用平分CPU时间的方式, 还是根据事件来切换任务.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值