Java WebSocket基本原理

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java WebSocket基本原理相关的知识,希望对你有一定的参考价值。

WebSocket协议介绍

    WebSocket协议是一个网络协议,允许两个相连的端在一个单一TCP连接上进行全双工消息通信。

    在WebSocket的场景中,连接通过HTTP和WebSocket端点交互的方式建立。连接的一方发送一个专门定制的HTTP请求,启动包含其希望连接的WebSocket的URL。它开始活动并被称为打开阶段握手。如果服务器愿意接受连接,服务器制定一个称为打开阶段握手响应的特殊的HTTP响应并将其发送会客户端。此时TCP连接已经建立,能够保证WebSocket消息的往返传递。连接一直保持直到任意一方终止连接,或者某些外部因素导致连接关闭。

    Java Web Socket API是最近JavaEE7平台的核心特性,因此不是用tomcat部署的用户要注意依赖一下两个包

<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-websocket-api</artifactId>
<version>7.0.47</version>
<scope>provided</scope>
</dependency>


<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>7.0</version>
<scope>provided</scope>
</dependency>

    创建第一个WebSocket应用,部署在Tomcat7及以上版本

    服务端代码:EchoServer.java

package org.mychat.websocket.server;
import javax.websocket.OnMessage;
import javax.websocket.server.ServerEndpoint;
/**
 * @author 陈胜
 * 注解@ServerEndpoint是类级别注解,
 * 用于告诉java平台它注解的类实际上要称为一个WebSocket端点
 */
@ServerEndpoint("/mychat.ws")
public class EchoServer {
 @OnMessage
 public String echo(String incomingMessage){
  System.out.println("接收到的消息: " + incomingMessage);
  return "I got this (" + incomingMessage + "),so I am sending it back";
 }
}

    客户端代码websocket_client.js + index.html

var echo_websocket;
function init(){
 output = document.getElementById("output");
}
function send_echo(){
 var wsUri = "ws://127.0.0.1:8080/mychat/mychat.ws";
 writeToScreen("Connecting to "+wsUri);
 echo_websocket = new WebSocket(wsUri);
 echo_websocket.onopen = function(evt){
  writeToScreen("Connected");
  doSend(document.getElementById("textID").value);
 };
 echo_websocket.onmessage = function(evt){
  writeToScreen("Received message: "+evt.data);
  echo_websocket.close();
 };
 echo_websocket.onerror = function(evt){
  writeToScreen("<span style=‘color:red;‘>ERROR:</span>" + evt.data);
  echo_websocket.close();
 };
}
function doSend(message){
 echo_websocket.send(message);
 writeToScreen("Send message: " + message);
}
function writeToScreen(message){
// console.log("接收到的Message:"+message);
 var pre = document.createElement("p");
 pre.style.wordWrap = "bread-word";
 pre.innerHTML = message;
 output.appendChild(pre);
}
window.addEventListener("load", init, false);

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>发送消息页面</title>
<script type="text/javascript" src="js/websocket_client.js"></script>
</head>
<body>
 <h1>Echo Server</h1>
 <div style="text-align: left;">
  <form action="">
   <input onclick="send_echo()" value="Press to send" type="button"/>
   <input id="textID" name="message" value="Hello Web Sockets" type="text"/>
  </form>
 </div>
 
 <div id="output"></div>
</body>
</html>

运行结果:

技术分享

虽然很简单,但是,我们已经与websocket已经有了亲密的接触。

本文出自 “阿酷博客源” 博客,请务必保留此出处http://aku28907.blog.51cto.com/5668513/1786772

以上是关于Java WebSocket基本原理的主要内容,如果未能解决你的问题,请参考以下文章

前端页面实现报警器提示音效果

WebSocket通信协议基础原理与潜在安全威胁

WebSocket通信协议基础原理与潜在安全威胁

Websocket原理

hashmap冲突的解决方法以及原理分析:

分享即时通讯开发之WebSocket:概念原理易错常识动手实践