websocket相关调研 总结帖
程序员文章站
2022-07-08 16:42:04
...
最近把websocket的客户端和服务端使用过的调通的例子总结如下
摒弃XMPP,xml类的在网络传输无论是流量还是性能已经是公认的瓶颈了。
采用websocket协议,
1.是数据格式可自定义,json,流,二进制等,极大的节约了网络流量,更具灵活性
2.方向多源,性能能达到极致而且可控。
3.跨平台,在web端,ios端,android端或者pc上通用,任意整合
但是目前websocket的实现方式也有很多
java的有tomcat7支持的;netty的;java-websockt库的;还有个国内的项目宝贝鱼,使用java的多线程实现的
以上例子已经调通,可参见我的博客
tomcat7的 http://haoningabc.iteye.com/blog/2124605
java-websocket.jar的http://haoningabc.iteye.com/blog/2011985
宝贝鱼的这个是引用别人的
http://cshbbrain.iteye.com/blog/1685217
但这些虽然有的是java的非阻塞io,但是性能局限于jvm,系统io和内存无法发挥极致。
java的优势就是就是业务代码灵活修改,但是作为im实时应用,还是欠缺很多原生的优势
其次是
python的websocket实现方案,python性能不必说了,python+fastcgi+nginx已经在互联网验证n久了
最流行的有两种websocket可用框架autobahn和tornado
autobahn用的python的twisted框架,异步编程很好的控制了性能;
Tornado 和现在的主流 Web 服务器框架(包括大多数 Python 的框架)有着明显的区别:
它是非阻塞式服务器,而且速度相当快。得利于其 非阻塞的方式和对 epoll 的运用,
Tornado 每秒可以处理数以千计的连接,这意味着对于实时 Web 服务来说,Tornado 是一个理想的 Web 框架
这两个例子也调通了,见我的博客
autobahn
http://haoningabc.iteye.com/blog/2153763
Tornado:
http://haoningabc.iteye.com/blog/2164973
性能最好的是c写的libwebsocket,也被很多开源项目作为组建使用,但是开发最复杂,不适用于开发。
最优方案nginx+lua+websocket
存储使用nginx+lua+redis(或者mongo),lua只作为nginx和redis,mongo的媒介
im异步刷到缓存后,再异步刷到关系型数据库进行存储,可选mysql的等只做业务管理的操作
nginx原生基于epoll和kqueue,而且特殊需求可以模块定制,理论上数据可以达到c10k,在服务器上用jetter压测,8核16G内存的服务器普通服务器,并发轻松过4k,如果多客户机同时压测得到效果一定更好
实现的例子,
http://haoningabc.iteye.com/blog/2165119
http://haoningabc.iteye.com/blog/2168717
特殊情况nginx定制,nginx模块开发的例子
http://haoningabc.iteye.com/blog/2024776
综上,以业务逻辑和im实时性能综合考虑
im实时通信的部分,最核心部分使用nginx+lua直接操作websocket,数据存mongo和redis缓存,定时同步到mysql
复杂也业务逻辑又偶尔实时通信的部分使用python,便于灵活的修改
管理平台的业务代码可以使用java或者php的形式(尽量不使用),
具体开发可根据需要的时间成本而定
ios客户端,也测试了几中方法,最可行就是SocketRocket
调通的例子
http://haoningabc.iteye.com/blog/2125460
如果使用无服务器形式,ios点对点可以使用苹果的mutipeer,结合蓝牙的方式
调通的例子
http://haoningabc.iteye.com/blog/2155794
以上所有完整代码都在http://github.com/killinux可以找到
任何需求可以我来做也可以随时找我讨论技术
还有一些ios的仿微信界面的,ui相关的,这里略
go的http://www.cnblogs.com/yjf512/archive/2013/02/18/2915171.html
如果是websocket传文件,比如图片等二进制
使用
http://haoningabc.iteye.com/blog/2266661
摒弃XMPP,xml类的在网络传输无论是流量还是性能已经是公认的瓶颈了。
采用websocket协议,
1.是数据格式可自定义,json,流,二进制等,极大的节约了网络流量,更具灵活性
2.方向多源,性能能达到极致而且可控。
3.跨平台,在web端,ios端,android端或者pc上通用,任意整合
但是目前websocket的实现方式也有很多
java的有tomcat7支持的;netty的;java-websockt库的;还有个国内的项目宝贝鱼,使用java的多线程实现的
以上例子已经调通,可参见我的博客
tomcat7的 http://haoningabc.iteye.com/blog/2124605
java-websocket.jar的http://haoningabc.iteye.com/blog/2011985
宝贝鱼的这个是引用别人的
http://cshbbrain.iteye.com/blog/1685217
但这些虽然有的是java的非阻塞io,但是性能局限于jvm,系统io和内存无法发挥极致。
java的优势就是就是业务代码灵活修改,但是作为im实时应用,还是欠缺很多原生的优势
其次是
python的websocket实现方案,python性能不必说了,python+fastcgi+nginx已经在互联网验证n久了
最流行的有两种websocket可用框架autobahn和tornado
autobahn用的python的twisted框架,异步编程很好的控制了性能;
Tornado 和现在的主流 Web 服务器框架(包括大多数 Python 的框架)有着明显的区别:
它是非阻塞式服务器,而且速度相当快。得利于其 非阻塞的方式和对 epoll 的运用,
Tornado 每秒可以处理数以千计的连接,这意味着对于实时 Web 服务来说,Tornado 是一个理想的 Web 框架
这两个例子也调通了,见我的博客
autobahn
http://haoningabc.iteye.com/blog/2153763
Tornado:
http://haoningabc.iteye.com/blog/2164973
性能最好的是c写的libwebsocket,也被很多开源项目作为组建使用,但是开发最复杂,不适用于开发。
最优方案nginx+lua+websocket
存储使用nginx+lua+redis(或者mongo),lua只作为nginx和redis,mongo的媒介
im异步刷到缓存后,再异步刷到关系型数据库进行存储,可选mysql的等只做业务管理的操作
nginx原生基于epoll和kqueue,而且特殊需求可以模块定制,理论上数据可以达到c10k,在服务器上用jetter压测,8核16G内存的服务器普通服务器,并发轻松过4k,如果多客户机同时压测得到效果一定更好
实现的例子,
http://haoningabc.iteye.com/blog/2165119
http://haoningabc.iteye.com/blog/2168717
特殊情况nginx定制,nginx模块开发的例子
http://haoningabc.iteye.com/blog/2024776
综上,以业务逻辑和im实时性能综合考虑
im实时通信的部分,最核心部分使用nginx+lua直接操作websocket,数据存mongo和redis缓存,定时同步到mysql
复杂也业务逻辑又偶尔实时通信的部分使用python,便于灵活的修改
管理平台的业务代码可以使用java或者php的形式(尽量不使用),
具体开发可根据需要的时间成本而定
ios客户端,也测试了几中方法,最可行就是SocketRocket
调通的例子
http://haoningabc.iteye.com/blog/2125460
如果使用无服务器形式,ios点对点可以使用苹果的mutipeer,结合蓝牙的方式
调通的例子
http://haoningabc.iteye.com/blog/2155794
以上所有完整代码都在http://github.com/killinux可以找到
任何需求可以我来做也可以随时找我讨论技术
还有一些ios的仿微信界面的,ui相关的,这里略
go的http://www.cnblogs.com/yjf512/archive/2013/02/18/2915171.html
如果是websocket传文件,比如图片等二进制
使用
http://haoningabc.iteye.com/blog/2266661
上一篇: jslinux总结帖
推荐阅读