核心提示:WebSocket碎语最近几日对websocket研究了一下,我就介绍一下服务端基于java的websocket的基本用法吧。至于websocket是什么的,基本原理我就不废话了,百度的介绍很详细。正...
WebSocket
碎语
最近几日对websocket研究了一下,我就介绍一下服务端基于java的websocket的基本用法吧。至于websocket是什么的,基本原理我就不废话了,百度的介绍很详细。
正题
客户端(浏览器)
var socket = new WebSocket("ws://localhost:8080/websocket"); socket.onopen = function(){ socket.send("i am Tanghulu"); console.log("socket is open"); } socket.onmessage = function(msg){ console.log(msg.data); } socket.onerror = function(error){ console.log(error); }
上面是创建websocket的js代码,首先建立一个WebSocket对象,在建立的过程中指定的url是服务端用来处理这个 连接的程序。当该socket顺利打开后会在控制台输出”socket is open”这句话并向服务端发送一句话”i am Tanghulu”,并且每当socket收到信息后会把信息输出到控制台,当连接发生异常的时候同样会将错误信息输出到控制台。
服务端
import javax.websocket.OnError; import javax.websocket.OnMessage; import javax.websocket.OnOpen; import javax.websocket.Session; import javax.websocket.server.ServerEndpoint; @ServerEndpoint(value="/websocket") public class WebSocket{ @OnOpen public void onOpen(Session session){ System.out.println("socket is open"); } @OnMessage public String onMessage(String msg,Session session){ System.out.println(msg); return "server is received"; } @OnClose public void onClose(){ System.out.println("close..."); } @OnError public void onError(Throwable error){ System.out.println(error.getMessage()); } }
这段服务端代码,和上面js代码基本差不多,都是在某一事件发生后将信息打印到控制台,服务端程序在收到消息的时候会将消息打印出来,并且返回一个字符串,这个字符串客户端会收到。
需要注意的是类的开始的标注中有个value=”/websocket”,这个指定了客户端如何定位这个服务端程序。(ws://localhost:8080/websocket),该程序需要websocket-api.jar 这个包,网上有很多资源。
关于部署
只需要将该程序直接放在你的web项目中即可,web容器会自动加载它的。
更多功能
以上介绍的是websocket如何传送字符串信息,websocket当然还可以传送二进制数据流,websocket可以直接send一个js的Blob对象或者是ArrayBuffer对象。当然在服务端接收时代码稍有变化
@OnMessage public String onMessage(InputStream ips,Session session){ //to do code ... } //或者下面的方法也可以用来接受二进制信息 @OnMessage public String onBinaryMessage(byte[] byteMessage,Session session){ //to do code ... }
当发送的是Blob对象的时候服务器会自动调用该方法,当然如果你定义了两个OnMessage事件方法,方法名字要不一样了!