最近把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
分享到:
相关推荐
websocket总结
WebSocket传视频方法总结
WebSocket传视频方法总结
WebSocket相较于socket更易用,可以使用WebSocket使Android客户端与服务器端进行长连接以便于实现实时交互,微信好友添加通知便可使用其实现
WebSocket for Delphi
该资源用C语言实现的简易websocket测试程序,并附有web端的html页面辅助调试,供websocket学习者下载使用,理解websocket协议
socket.io.js库,在HTML页面[removed][removed]像引用其他脚本一样导入就可以了
利用开源组件websocket-sharp实现websocket的范例。用于framwork4.5以下版本实现websocket。
C# IIS webSocket 实例
这个代码例子使用了c c++实现了websocket 开发 包含了websocket服务器和websocket客户端,拥有详细的解释 这个库比libwebsocket更加简单方便,比libsocket更加高效便捷.
websocket长连接,实现实时同步,可借鉴
websocket
websocket 日志读取日志输出
websocket客户端,内含代码,可改IP地址
qt websocket 客户端代码 简单的websocket的示例代码
主要介绍了C#实现WebSocket协议客户端和服务器websocket sharp组件实例解析,包括websocket sharp组件的概念及使用方法,需要的朋友可以参考下
按照自己的想法用vs2010 c#编写的websocket 服务器端。 端口是8848 同时支持TCP和websocket。假如是websocket连接进入,存起来。假如是TCP连接进入,“广播”TCP发来的数据。适合初学者。
websocket client by MFC
unty websocket 客户端 服务端 通信 使用WebSocketSharp框架
本篇博客介绍微信小程序中webSocket的使用方法,以及如何用局部网络建立webSocket连接,进行客户端与服务器之间的对话: webSocket简介 微信小程序端API调用 服务器端使用nodejs配置 演示websocket webSocket...