WebSocket示例
到目前为止各服务器对Websocket支持都不同,各做各的,还没有一个统一的标准 ,但是其实现方法基本上是一样的 。
下面为大家介绍一下 在MyEclipse和jetty环境下的使用
先把代码贴起 :
SocketMe .java
package com.dql.socket;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import org.eclipse.jetty.websocket.*;
public class SocketMe extends WebSocketServlet{
@Override
public WebSocket doWebSocketConnect(HttpServletRequest arg0, String arg1) {
// TODO Auto-generated method stub
return new MeWebSocket();
}
}
MeWebSocket.java
package com.dql.socket;
import java.io.IOException;
import org.eclipse.jetty.websocket.*;
import com.dql.servlet.InitServlet;
public class MeWebSocket implements WebSocket.OnTextMessage{
public WebSocket.Connection connection;
@Override
public void onClose(int arg0, String arg1) {
// TODO Auto-generated method stub
InitServlet.getSocketList().remove(this);
System.out.println("onclose!!!!");
}
@Override
public void onOpen(Connection conn) {
// TODO Auto-generated method stub
InitServlet.getSocketList().add(this);
this.connection = conn;
System.out.println("onOpen=========================="+conn.getMaxIdleTime());
}
@Override
public void onMessage(String arg0) {
// TODO Auto-generated method stub
System.out.println("接受到的信息:"+arg0);
try {
for(MeWebSocket socket:InitServlet.getSocketList()){
socket.getConnection().sendMessage("返回的信息!!!!!!!"+arg0);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public WebSocket.Connection getConnection() {
return connection;
}
public void setConnection(WebSocket.Connection connection) {
this.connection = connection;
}
}
InitServlet .java
package com.dql.servlet;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import com.dql.socket.MeWebSocket;
public class InitServlet extends HttpServlet {
private static final long serialVersionUID = -1936532122758235837L;
private static List<MeWebSocket> socketList;
public void init(ServletConfig config) throws ServletException {
InitServlet.socketList = new ArrayList<MeWebSocket>();
super.init(config);
System.out.println("Server start============");
}
public static synchronized List<MeWebSocket> getSocketList() {
return InitServlet.socketList;
}
}
Web.xml
<servlet>
<servlet-name>initServlet</servlet-name>
<servlet-class>com.dql.servlet.InitServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet>
<servlet-name>alarmServlet</servlet-name>
<servlet-class>com.dql.socket.SocketMe</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>alarmServlet</servlet-name>
<url-pattern>/alarmServer</url-pattern>
</servlet-mapping>
Websocket.html
<!DOCTYPE html>
<html>
<head>
<title>Web Socket Demo</title>
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="this is my page">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<!--<link rel="stylesheet" type="text/css" href="./styles.css">-->
<script type="text/javascript">
var ws = null;
function startServer() {
// 设定WebSocket,注意协议是ws,请求是指向对应的WebSocketServlet的
var url = "ws://127.0.0.1:8080/New/alarmServer";
// 创建WebSocket实例,下面那个MozWebSocket是Firefox的实现
if ('WebSocket' in window) {
ws = new WebSocket(url);
} else if ('MozWebSocket' in window) {
ws = new MozWebSocket(url);
} else {
alert('Unsupported.');
return;
}
// WebSocket握手完成,连接成功的回调
// 有个疑问,按理说new WebSocket的时候就会开始连接了,如果在设置onopen以前连接成功,是否还会触发这个回调
ws.onopen = function() {
// alert('Opened!');
};
ws.οnerrοr=function(){
alert(error);
}
// 收到服务器发送的文本消息, event.data表示文本内容
ws.onmessage = function(event) {
// alert('Receive message: ' + event.data);
var label = document.getElementById("area");
// alert(label.innerHTML);
label.innerHTML = label.innerHTML+ event.data+"\r\n";
};
// 关闭WebSocket的回调
ws.onclose = function() {
//alert('Closed!');
};
}
function sendMyMessage() {
var textMessage = document.getElementById('textMessage').value;
if(ws != null && textMessage != '') {
// 通过WebSocket想向服务器发送一个文本信息
ws.send(textMessage);
}
}
</script>
</head>
<body οnlοad="startServer()">
<textarea rows="30" cols="50" id="area"></textarea><br>
<input type="text" id="textMessage" size="20" />
<input type="button" οnclick="sendMyMessage()" value="Send"><br>
</body>
</html>