websocket1 javaee7 tomcat8 html5

原文:http://www.byteslounge.com/tutorials/java-ee-html5-websocket-example
这不是翻译,是个人理解,吸收为已用.


服务端:
@ServerEndpoint 在类级别上使用,它定义当前类作为服务器端点.在此注解中使用的值表示将侦听客户端连接到服务器端点的URL.
@OnOpen和@OnClose 在方法级别上使用.这样的注解几乎是不言自明的.带有这样注解的方法,代表新的一个客户端在连接打开时和关闭时被调用.
@OnMessage一样是方法级别的.当有一个来自于客户端的新消息,带有这样注解的方法就会被调用来接收这个消息.要注意这个方法可能有一个可选参数类型javax.websocket.Session.如果定义了这参数,那么这个容器注入的Session,就会与发送要处理消息的当前客户端的Session相关联.


通过Session可以得到相关联的客户端(如通过getBasicRemote()),进而发消息到客户端.http://docs.oracle.com/javaee/7/api/javax/websocket/Session.html
以上注解在服务端的一个使用例子(现在的tomcat8 rc5跑这样的代码,没问题).

import java.io.IOException;
import javax.websocket.OnClose;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.server.ServerEndpoint;
@ServerEndpoint("/websocket")
public class WebSocketTest {

	@OnMessage
	public void onMessage(String message, Session session) throws IOException,
			InterruptedException {
		// Print the client message for testing purposes
		System.out.println("Received: " + message);
		// Send the first message to the client
		session.getBasicRemote().sendText("This is the first server message");
		// Send 3 messages to the client every 5 seconds
		int sentMessages = 0;
		while (sentMessages < 3) {
			Thread.sleep(5000);
			session.getBasicRemote().sendText("This is an intermediate server message. Count: " + sentMessages);
			sentMessages++;
		}
		// Send a final message to the client
		session.getBasicRemote().sendText("This is the last server message");
	}

	@OnOpen
	public void onOpen() {
		System.out.println("Client connected");
	}

	@OnClose
	public void onClose() {
		System.out.println("Connection closed");
	}
}

客户端:
javascript的WebSocket对象函数
onopen函数:当与服务器端点建立连接就会被调用.
onerror函数:当客户端-服务端通信时有错误发生时会被调用.
onmessage函数:当接收一个来自于服务端的消息时会被调用.
send函数:用来从客户端发送一个消息到服务端.


使用new WebSocket()构造函数,传递端点URL(例如: ws://localhost:8080/byteslounge/websocket)就可以连接到websocket服务器.

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<div>
		<input type="submit" value="Start" onclick="start()" />
	</div>
	<div id="messages"></div>
	<script type="text/javascript">
		var webSocket = new WebSocket('ws://localhost:8080/byteslounge/websocket');
		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>
</html>



你可能感兴趣的:(websocket1 javaee7 tomcat8 html5)