wss 初体验

说实话,当老大跟我说试下wss的时候,我一脸懵逼,wss是啥?接触java还没多久,虽然知道了structs,IFTTT,但 what is wss?老大说,你去网上了解一下,然后看怎么样?(我们是想做web api,然后在微信小程序上试试)。没办法,只好老老实实地百度google,自己埋头查资料,写demo,测试。最后,总算也完成了任务,写了几个api,在微信小程序上也好好地运行起来。开工第二天,闲着也是闲着,就来总结一下我的wss开发。

我相信,当你在百度输入wss的时候,并不能预想地搜到一大堆博客呀,介绍呀,还会掺杂一些乱七八糟的。别急,虽然没什么有用的,但是还是可以找到沾边点的东西。这时,你会发现,与wss连接在一起的,websocket,以及ws。websocket是关键。当你搜索websocket的时候,然后就会有许多的博客文章来介绍websocket是什么了,怎么来实现websocket编程了。

现在,来说说我的理解吧,websocket是一种通信协议,可以类比于http。wss与ws就相当http于https。wss是加密的安全通信协议,需要证书。所以初学下,我们可以从ws出发。websocket通信就相当于建立一个tcp连接的通道,连接建立成功之后,双方就可以互相通信了,直到连接关闭。从而可以实现服务端主动向客户端发送消息。另外,websocket通信是通过异步回调的,open,close,onMessage(收到消息),onError(发生错误)都可以定义回调,通过endPoint的方式。客户端可以不用阻塞,不用轮询。顺带说一下,通信格式是你可以自定义的,只要客户端和服务端统一即可。不过大部分为json格式。

说完了通信,我们再来说说开发部署运行。websocket可以通过部署到tomcat上运行。建立一个动态的web工程,导出war包,部署到tomcat中即可.(同structs2,不清楚的可以看我上一篇<菜鸟创建一个简单的structs2项目>) 。

好了下面介绍下websocket编程吧。要进行websoket编程,需要了解:

@ServerEndpoint  

指定URI,相当于http中的URL,写在类前面

@OnOpen

websocket连接建立成功

@OnMessage

websocket收到消息

@OnClose

websocket连接关闭

@OnError

websocket发生异常错误


好了,先看服务端。

首先创建类 RGBLightSocket(这是一个灯泡的socket类)。

在类的上面指定endPoint

value即URI,带{}为参数。configurator 为配置器,即请求过来的时候,会先进入配置器,你可以在这里做一些权限校验,是否允许这个连接建立,如果无需校验或其它一些前处理,可以不指定,即使用系统默认的

指定打开方法:

wss 初体验_第1张图片
在打开方法中判定配置器的校验参数,如果校验失败,则关闭session,则连接不会建立。并维护session列表。

指定接收到消息的方法:


wss 初体验_第2张图片
message 为收到的消息,@PathParam(value="access_token")String token 为URI中参数的一种写法。你可以写你需要用的参数,不需要的可以不写。在这里解析和处理消息。处理完成之后,发送消息给客户端。我这在parseMessage() 方法里。你可以根据需求是只发送给当前会话的session,还是要发给多个用户。所以需要在open的时候维护session。


指定关闭方法

wss 初体验_第3张图片
关闭的时候释放一些资源

指定错误方法:

当socket错误的时候的处理


好了,websoket的5个重要的方法都有了,发送消息使用sendText().

session.getBasicRemote().sendText(errMsg);

看一下我的发送方法:


wss 初体验_第4张图片
我这是发送给所有拥有mac地址这个设备的用户。用户只需在开始查询一次这个设备的状态,之后每次对这个设备的操作,不论是来源于哪个用户,我都向所有正在连接的拥有这个设备的用户发送操作完成之后的状态。从而解决了轮询问题。当然,这个需要你的endPoint设计合理。


服务端描述至此,再来看看客户端如何与服务端通信吧。

以下为jsp页面中的调用:

打开socket

wss 初体验_第5张图片
wss和ws都可用。只是wss需要开放443端口。需要在server.xml和web.xml中配置。同https的配置。

发送消息:<开灯>


使用socket调用send() 方法发送定义好的格式字符串即可


由上述可以看出,客户端和服务端只需要在连接建立之后,发送消息和处理发送消息的回调即可。无需等待,没有阻塞。

你可能感兴趣的:(wss 初体验)