jetty8中已经自带有websocket功能,所以我们可以很方便搭建一个自己的websocket服务。
启动类:org.noahx.websocket.WebSocketServer
1、外部依赖包如下(maven)
2、搭建的websocket server,写一个服务器启动类
WebSocketServer
websocket服务端口我设置的为8085。通过向jetty server中加入WebSocketHandler就可以提供websocket服务了。由于WebSocketHandler是HandlerWrapper的子类,所以这个handler中还可以再加入一个ResourceHandler。这样就可以在一个端口上同时提供websocket与http服务。ResourceHandler指向了类路径org/noahx/websocket/http下,这个包下的所有资源都将可以发布为web资源给http请求。
3、开发MyWebSocketHandler与MyWebSocket
MyWebSocketHandler与MyWebSocket
doWebSocketConnect中实现doWebSocketConnect方法,返回我们需要的WebSocket对象。 doWebSocketConnect方法中可以取到请求的url,所以可以当做分发器,通过url的不同分发到不同WebSocket。
如:ws://127.0.0.1:8085/ws1与ws://127.0.0.1:8085/ws2
MyWebSocket所实现的内容是以每500毫秒的速度,向浏览器发送0-100的随机数(注意这里是由服务器主动推送)。
MemTask
取随机数的任务类
4、开发前台javascript客户机(test.html)
使用到了以下内容:
web-socket-js,https://github.com/gimite/web-socket-js/就是这个解决了不支持html5的websocket的浏览器也可以调用websocket的问题。web-socket-js会自动判断是不是支持html5的websocket,如果支持没有什么区别。如果发现不支持将通过Flash自动调用websocket来做socket的中转。
highcharts,http://www.highcharts.com/这个是通过纯javascript(jquery)来绘制图表的js图表框架。来配合websocket,做到实时的动态图表。
test.html
原理是通过web-socket-js建立与服务器的websocket连接,服务器发现连接后会主动推送数据给浏览器。
收到服务器推送过来的数据会触发onmessage,这时在onmessage中对图表进行绘制。从而达到效果。
*5、Flash Policy Server的配置
ie78可以使用websocket的关键。web-socket-js会调用flash请求websocket。
flash请求websocket也有一个前提。flash会检查安全策略文件(xml)是否允许它这样做。默认flash会请求相同host的843端口,发送policy-file-request请求,这时返回正常的安全策略时,websocket才可以正常使用。当然我们也可以通过WebSocket.loadFlashPolicyFile(方法重新指定策略文件url。样例是指向了10843端口,因为如果监听<1000的端口需要root权限,所以内嵌Java版的Flash Policy Server端口为10843。
但还是建议不要手动指定WebSocket.loadFlashPolicyFile,而是用843。因为flash总是先会从843找,如果找不到再从websocket端口找(8085)。所以如果设置其它url了会影响加载速度。
Flash Policy的资料可以参考:http://www.adobe.com/devnet/flashplayer/articles/socket_policy_files.html里面提供了一个flashpolicyd_v0.6程序,可以做Flash Policy Server,但不是java实现的。
我也写了一个Flash Policy Server,java版的
FlashPolicyServer
这样就可以和websocket server整合在一起。
安全策略文件的样例格式:
6、websocket展望
继ajax后websocket会给界面带来更快更好的交互效果与体验,伴随移动市场的壮大websocket也将有可能成为标准的api协议。
框架介绍:
AS3WebSocket,https://github.com/Worlize/AS3WebSocket提供给ActiveScript3使用的websocket框架
jWebSocket,http://jwebsocket.org/有服务器与客户端,高一级别websocket框架,提供了对基础websocket的扩展,如jsonSocket,xmlSocket,cvsSocket
kaazing(商业),http://kaazing.com/商业级整套html5与websocket解决方案,效果最好,可惜是商业的