webSocket

最近由于朋友最近遇到服务器要与浏览器交互问题请教与我,我才又了解到一个新的知识就是关于webSocket,当时我也没有搞清楚不过通过名字大概就知道这个东西肯定跟Socket有关联,所以我百度了一下。
我把百度上面的内容稍微按照我的思路整理了一下:
webSocket主要是用在服务器与浏览器进行交互而采用新技术,不过这个要在tomcat7.0.53之后才能够支持。
以前的网站这种b/s模式无非就是单向访问,可以了如果对于做网页版qq要做一问一答这样的,就不太好实现最简单的办法ajax进行轮询,但是这种有他的不太好的地方比如说你可以能向服务器只发1,2个字节的数据但是头部采用http很大,而且这种做法每次就是浏览器端发出的请求。所以延伸出其他的技术,比如说:flex这种第三方插件还有一些其他的这点我就不多说了。而webSocket出现解决双向通信的问题。
我把demo写出来以后方便我能够在后面遇到的情况时候翻出来看看:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<display-name></display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>

<servlet>
<servlet-name>webSocketServlet</servlet-name>
<servlet-class>com.servlet.HomePageServlet</servlet-class>
</servlet>

<servlet-mapping>
<servlet-name>webSocketServlet</servlet-name>
<url-pattern>/index.do</url-pattern>
</servlet-mapping>
</web-app>

上面是xml配置部分,下面的servlet

@SuppressWarnings({"serial", "deprecation"})
public class HomePageServlet extends WebSocketServlet {

/* @see org.apache.catalina.websocket.WebSocketServlet#createWebSocketInbound(java.lang.String, javax.servlet.http.HttpServletRequest)
*/
@Override
protected StreamInbound createWebSocketInbound(String subProtocol,
HttpServletRequest req) {
System.out.println("系统调用.....");
return new MessageInbound() {

@Override
protected void onTextMessage(CharBuffer arg0) throws IOException {
System.out.println("调用方法1.....");
}

@Override
protected void onBinaryMessage(ByteBuffer arg0) throws IOException {
System.out.println("调用方法2.....");
}

@Override
protected void onClose(int status) {
super.onClose(status);
System.out.println("调用方法3.....");
}

@Override
protected void onOpen(WsOutbound outbound) {
super.onOpen(outbound);
System.out.println("调用方法4.....");
}
};
}

}

而html代码就是

<body>
<div>
<input type="submit" value="Start" onclick="start()" />
</div>
<div id="messages"></div>
<script type="text/javascript">
var webSocket =
new WebSocket('ws://localhost/index.do');

webSocket.onerror = function(event) {
onError(event)
};

webSocket.onopen = function(event) {
onOpen(event)
};

webSocket.onmessage = function(event) {
onMessage(event)
};

function onMessage(event) {
document.getElementById('messages').innerHTML
+= '<br />' + event.data;
}

function onOpen(event) {
document.getElementById('messages').innerHTML
= 'Connection established';
}

function onError(event) {
alert(event.data);
}

function start() {
webSocket.send('hello');
return false;
}
</script>
</body>

而在运行的过程中遇到了找不到依赖的jar,我把这个提示粘贴出来:The type org.apache.coyote.http11.upgrade.UpgradeInbound cannot be resolved. It is indirectly referenced from required .class files
后来我在网上找了一下资料看了一下才了解到要在build path中添加tomcat的lib下面的jar放入到build path中,然后加了之后运行成功。O(∩_∩)O有学到新的东西了!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值