websocket是用来干什么的,具体的请自行百度。

本文实现一个简单的websocket的入门小例子,实现客户端发送一句换,服务器端返回。即一个简单的交互。

一、服务器端的实现

1.创建一个类实现ServerApplicationConfig接口

2.编写一个后台websocket服务类,使用@ServerEndpoint注解标注。

第一步代码:

/**
* 该类在服务器启动时,会自动执行
*
* @author huan
*
*/
public class EchoConfig implements ServerApplicationConfig {
private Logger log = Logger.getLogger(EchoConfig.class);
/**
* 基于注解的实现方式,<br />
* classess 中的类是实现了有@ServerEndpoint标注的类
*/
@Override
public Set<Class<?>> getAnnotatedEndpointClasses(Set<Class<?>> classes) {
log.info("服务器启动...");
for (Class<?> clazz : classes) {
log.info("加载的websocket服务类:" + clazz.getName());
}
return classes;
} /**
* 基于接口的实现方式
*/
@Override
public Set<ServerEndpointConfig> getEndpointConfigs(Set<Class<? extends Endpoint>> arg0) {
return null;
}
}

第二步代码:

@ServerEndpoint("/echo4me")
public class EchoServer {
private static Logger log = Logger.getLogger(EchoServer.class);
public EchoServer() {
}
@OnOpen
public void open(Session session) throws IOException {
log.info("一个客户端建立连接: websocket session id -> " + session.getId());
if (session.isOpen()) {
session.getBasicRemote().sendText("欢迎建立连接.");
}
}
@OnClose
public void onClose() {
log.info("websocket关闭.");
}
@OnMessage
public void onMessage(Session session, String msg) {
log.info("客户端发送的消息:" + msg);
if (session.isOpen()) {
try {
session.getBasicRemote().sendText("服务器返回的数据:"+msg);
} catch (IOException e) {
e.printStackTrace();
}
}
}
}

注意:1、上面的类中必须要有一个无参数的构造器方法

           2、方法中的参数 session  并不是httpsession,而是websocket中的session

           3、@ServerEndpoint("/echo4me")标注的类不用再配置中配置,它表示一个websocket的服务端,echo4me表示访问的路径, 即访问路径为:http://localhost:端口/项目部署名/echo4me

           4、@OnMessage表示客户端发送消息过来时触发。

二、前台的写法:

1.创建websocket请求,

2.打开请求

3.发送数据

js部分:

<strong><script type="text/javascript">
var ws = null;
function openConnection(){
var target = "ws://localhost:8080/study-websocket/echo4me"
if ('WebSocket' in window) {
ws = new WebSocket(target);
} else if ('MozWebSocket' in window) {
ws = new MozWebSocket(target);
} else {
alert('WebSocket is not supported by this browser.');
return;
}
console.info('连接websocket成功.');
ws.onopen = function(){
}
ws.onerror = function(e){
console.info("发生错误:");
console.warn(w);
}
ws.onmessage = function(e){
$('#serverReturnData').val($('#serverReturnData').val()+e.data);
}
ws.onclose = function(e){
console.info("websocket关闭");
console.log(e);
}
} $(function(){
/** 发送数据到服务器端 */
$('#sendBtn').on('click',function(){
var val = $('#sendData').val();
if(val){
if(ws){
ws.send(val);
}else{
alert('请先创建websocket连接.')
}
}else{
alert("请输入要发送给服务器端的数据.");
}
})
});
</script></strong>

注意:此处的url为  echo4me为@ServerEndpoint注解中value属性的值

<strong>var target = "ws://localhost:8080/study-websocket/echo4me"
</strong>

 html代码部分:

<strong><button id="openWebsocket" onclick="openConnection()">连接服务器:</button><br/>
发送数据到服务器:<input id="sendData" /><input type="button" id="sendBtn" value="发送"/> <br/>
服务器返回的数据:<input id="serverReturnData" style="width: 100%;color: red;"/></strong>

到此,前后台都实现。

前后台交互的图片

websocket入门案例(echo)的更多相关文章

  1. 你所不知道的 CSS 阴影技巧与细节 滚动视差?CSS 不在话下 神奇的选择器 :focus-within 当角色转换为面试官之后 NPOI 教程 - 3.2 打印相关设置 前端XSS相关整理 委托入门案例

    你所不知道的 CSS 阴影技巧与细节   关于 CSS 阴影,之前已经有写过一篇,box-shadow 与 filter:drop-shadow 详解及奇技淫巧,介绍了一些关于 box-shadow  ...

  2. Spring学习笔记(一)—— Spring介绍及入门案例

    一.Spring概述 1.1 Spring是什么 Spring是一个开源框架,是于2003年兴起的一个轻量级的Java开发框架, 由Rod Johnson 在其著作<Expert one on ...

  3. SpringMVC入门案例及请求流程图(关于处理器或视图解析器或处理器映射器等的初步配置)

    SpringMVC简介:SpringMVC也叫Spring Web mvc,属于表现层的框架.Spring MVC是Spring框架的一部分,是在Spring3.0后发布的 Spring结构图 Spr ...

  4. SpringMvc核心流程以及入门案例的搭建

    1.什么是SpringMvc Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面.Spring 框架提供了构建 Web 应用程序的全功能 M ...

  5. Struts2第一个入门案例

      一.如何获取Struts2,以及Struts2资源包的目录结构的了解    Struts的官方地址为http://struts.apache.org 在他的主页当中,我们可以通过左侧的Apache ...

  6. MyBatis入门案例、增删改查

    一.MyBatis入门案例: ①:引入jar包 ②:创建实体类 Dept,并进行封装 ③ 在Src下创建大配置mybatis-config.xml <?xml version="1.0 ...

  7. Hibernate入门案例及增删改查

    一.Hibernate入门案例剖析: ①创建实体类Student 并重写toString方法 public class Student { private Integer sid; private I ...

  8. Quartz应用实践入门案例二(基于java工程)

    在web应用程序中添加定时任务,Quartz的简单介绍可以参看博文<Quartz应用实践入门案例一(基于Web应用)> .其实一旦学会了如何应用开源框架就应该很容易将这中框架应用与自己的任 ...

  9. Quartz应用实践入门案例一(基于Web环境)

    Quartz是一个完全由java编写的开源作业调度框架,正是因为这个框架整合了许多额外的功能,所以在使用上就显得相当容易.只是需要简单的配置一下就能轻松的使用任务调度了.在Quartz中,真正执行的j ...

随机推荐

  1. 在EXCEL中批量添加超链接

    在单元格中输入函数 =HYPERLINK(链接位置,[显示文本])

  2. 有备无患「GitHub 热点速览 v.21.38」

    作者:HelloGitHub-小鱼干 数据库最重要的一个功能是容灾备份,备份不只是对数据库重要,对日常工作生活的我们一样重要,比如花了一个工作日写的代码没有备份(虽然可能只有 1 行-)总归是一个让人 ...

  3. Consul+Ocelot+Polly在.NetCore中使用(.NET5)-网关Ocelot+Consul

    相关文章 Consul+Ocelot+Polly在.NetCore中使用(.NET5)-Consul服务注册,服务发现 Consul+Ocelot+Polly在.NetCore中使用(.NET5)-网 ...

  4. 在PHP中如何为匿名函数指定this?

    在之前的文章中,我们已经学习过匿名函数的使用,没有看过的小伙伴可以进入传送门先去了解下闭包匿名函数的用法,传送:还不知道PHP有闭包?那你真OUT了. 关于闭包匿名函数,在JS中有个很典型的问题就是要 ...

  5. mybatis if else if 条件判断SQL片段表达式取值和拼接

    前言 最近在开发项目的时候涉及到复杂的动态条件查询,但是mybaits本身不支持if elseif类似的判断但是我们可以间接通过 chose when otherwise 去实现其中choose为一个 ...

  6. Charles安装https证书

    Charles抓取https的包,出现unknow,需要安装https证书.

  7. CI框架 core

    https://blog.csdn.net/admin_admin/article/details/51769805 1.扩展控制器 1.在application/core新建一个自己的控制器(MY_ ...

  8. python多线程与_thread模块

    进程与线程 1.进程:计算机程序只是存储在磁盘中的可执行二进制(或其他类型)的文件.只有把他们加载到内存中并被操作系统调用,才具有其生命周期.进程则是一个执行中的程序.每个进程都拥有自己的地址空间,内 ...

  9. three.js 纹理动画实现

    需求: 1.使用一张长图.分别播放这张长图的不同位置 来达到动态内容的目的 解决方案: 1.纹理创建并指定重复方向:this.texture.wrapS = this.texture.wrapT = ...

  10. ggplot2 画图随笔

    ggplot2 盒图+显著性线 compire <- list(c('1','2'),c('1','4')) ggplot(info,aes(x=cluster,y=value))+ stat_ ...