http://www.oschina.net/translate/java-ee-html5-websocket-example?cmp

HTML5给Web浏览器带来了全双工TCP连接websocket标准服务器的能力。

换句话说,浏览器能够与服务器建立连接,通过已建立的通信信道来发送和接收数据而不需要由HTTP协议引入额外其他的开销来实现。

在本教程中我们将在Java EE环境下实现一个简单的websockect服务器端来和客户端进行数据交互。

本教程需要以下环境:

  1. Ubuntu 12.04
  2. JDK 1.7.0.21
  3. Glassfish 4.0
: Java EE 7中才引入了WebSocket。

WebSocket服务器端

让我们定义一个 Java EE websocket服务器端:

WebSocketTest.java

package com.byteslounge.websockets;

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");
}
}

你可能已经注意到我们从 javax.websocket包中引入了一些类。

@ServerEndpoint 注解是一个类层次的注解,它的功能主要是将目前的类定义成一个websocket服务器端。注解的值将被用于监听用户连接的终端访问URL地址。

onOpen 和 onClose 方法分别被@OnOpen@OnClose 所注解。这两个注解的作用不言自明:他们定义了当一个新用户连接和断开的时候所调用的方法。

onMessage 方法被@OnMessage所注解。这个注解定义了当服务器接收到客户端发送的消息时所调用的方法。注意:这个方法可能包含一个javax.websocket.Session可选参数(在我们的例子里就是session参数)。如果有这个参数,容器将会把当前发送消息客户端的连接Session注入进去。

本例中我们仅仅是将客户端消息内容打印出来,然后首先我们将发送一条开始消息,之后间隔5秒向客户端发送1条测试消息,共发送3次,最后向客户端发送最后一条结束消息。

客户端

现在我们要来写websocket测试应用的客户端:

page.html

<!DOCTYPE html>
<html>
<head>
<title>Testing websockets</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>

这是一个简单的页面,包含有JavaScript代码,这些代码创建了一个websocket连接到websocket服务器端。

onOpen 我们创建一个连接到服务器的连接时将会调用此方法。

onError 当客户端-服务器通信发生错误时将会调用此方法。

onMessage 当从服务器接收到一个消息时将会调用此方法。在我们的例子中,我们只是将从服务器获得的消息添加到DOM。

我们连接到websocket 服务器端,使用构造函数 new WebSocket() 而且传之以端点URL:

ws://localhost:8080/byteslounge/websocket

最新文章

  1. quartz配置文件详解
  2. JSP-11-Servlet
  3. oracle procedure
  4. 使用ASP.Net WebAPI构建REST服务(三)——返回值
  5. spring AOP advice 类型 和 通用的切点的配置方式
  6. Windows 中JDK安装配置教程
  7. OpenGL ES 2.0 内置变量
  8. Team Foundation Server 2015使用教程--默认团队权限说明
  9. js函数大全(2)
  10. 如何将网站升级为HTTPS协议?
  11. 创建Android项目及常见错误解决
  12. 如何让模拟的json数据接口能够正常的在手机上有效果
  13. webstrom中如何将npm菜单调出?
  14. ERP打印入库单(四十)
  15. jquery.cookie 使用方法
  16. 漫画描述HDFS工作原理
  17. 深入理解Java接口和抽象类
  18. 提高eclipse使用效率(一)--使用快捷键
  19. 使用union all 遇到的问题(俩条sql语句行数的和 不等于union all 后的 行数的和 !);遗留问题 怎么找到 相差的呐俩条数据 ?
  20. ServiceHelper

热门文章

  1. spring---aop(8)---Spring AOP中optimize
  2. perf 工具介绍3
  3. IIS 未能从程序集“System.ServiceModel, Version=3.0.0.0, Culture=neutral,
  4. 使用CSS3的@media来实现网页自适应
  5. Web项目中获取SpringBean——在非Spring组件中获取SpringBean
  6. recyclerView 列表类控件卡顿优化
  7. Python 3.6学习笔记(一)
  8. 文件权限控制篇access alphasort chdir chmod chown chroot closedir fchdir fchmod fchown fstat ftruncate getcwd
  9. sqlalchemy简单示例
  10. ffmpeg 2.3版本号, 关于ffplay音视频同步的分析