websocket入门案例(echo)
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)的更多相关文章
- 你所不知道的 CSS 阴影技巧与细节 滚动视差?CSS 不在话下 神奇的选择器 :focus-within 当角色转换为面试官之后 NPOI 教程 - 3.2 打印相关设置 前端XSS相关整理 委托入门案例
你所不知道的 CSS 阴影技巧与细节 关于 CSS 阴影,之前已经有写过一篇,box-shadow 与 filter:drop-shadow 详解及奇技淫巧,介绍了一些关于 box-shadow ...
- Spring学习笔记(一)—— Spring介绍及入门案例
一.Spring概述 1.1 Spring是什么 Spring是一个开源框架,是于2003年兴起的一个轻量级的Java开发框架, 由Rod Johnson 在其著作<Expert one on ...
- SpringMVC入门案例及请求流程图(关于处理器或视图解析器或处理器映射器等的初步配置)
SpringMVC简介:SpringMVC也叫Spring Web mvc,属于表现层的框架.Spring MVC是Spring框架的一部分,是在Spring3.0后发布的 Spring结构图 Spr ...
- SpringMvc核心流程以及入门案例的搭建
1.什么是SpringMvc Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面.Spring 框架提供了构建 Web 应用程序的全功能 M ...
- Struts2第一个入门案例
一.如何获取Struts2,以及Struts2资源包的目录结构的了解 Struts的官方地址为http://struts.apache.org 在他的主页当中,我们可以通过左侧的Apache ...
- MyBatis入门案例、增删改查
一.MyBatis入门案例: ①:引入jar包 ②:创建实体类 Dept,并进行封装 ③ 在Src下创建大配置mybatis-config.xml <?xml version="1.0 ...
- Hibernate入门案例及增删改查
一.Hibernate入门案例剖析: ①创建实体类Student 并重写toString方法 public class Student { private Integer sid; private I ...
- Quartz应用实践入门案例二(基于java工程)
在web应用程序中添加定时任务,Quartz的简单介绍可以参看博文<Quartz应用实践入门案例一(基于Web应用)> .其实一旦学会了如何应用开源框架就应该很容易将这中框架应用与自己的任 ...
- Quartz应用实践入门案例一(基于Web环境)
Quartz是一个完全由java编写的开源作业调度框架,正是因为这个框架整合了许多额外的功能,所以在使用上就显得相当容易.只是需要简单的配置一下就能轻松的使用任务调度了.在Quartz中,真正执行的j ...
随机推荐
- 通过JDK动态代理实现 Spring AOP
1.新建一个目标类 接口:public interface IUserService //切面编程 public void addUser(); public void updateUser( ); ...
- GO安装golang.org/x/net扩展库
在学习golang过程中,有部分示例代码使用到了非标准库golang.org/x/net/html相关的库函数,但是标准代码库中没有该库,因此需要自己安装: 我这里使用git下载源码进行的安装. 为了 ...
- C#中的文本到语音
本演示说明了如何使用c#.net Windows Forms应用程序中的system.speech库将文本转换为语音.Microsoft .NET框架提供System.Speech.Synthesis ...
- 反射应用和获取Class对象的三种方式
一.写一个"框架",可以创建任何对象运行任何方法 1.配置文件 2.使用类加载器ClassLoader,Properties集合是可以和IO流结合使用完成读取和写入数据的集合,方法 ...
- salesforce零基础学习(一百零七)Dynamic Action
说一下项目中常见的甲方的需求.背景如下:Order在SF端生成以后,在status为completed以后,需要点击按钮同步到SAP或者其他的MDM,客户希望的是,如果 order的状态为 compl ...
- 妙用 background 实现花式文字效果
本文将讲解如何利用 background 系列属性,巧妙的实现一些花式的文字效果.通过本文,你将可以学到: 通过 background-size 与 background-position 实现酷炫的 ...
- [转]SpringBoot系列——花里胡哨的banner.txt
Creating ASCII Text Banners from the Linux Command Line In Ubuntu, Debian, Linux Mint etc. $ sudo ap ...
- 1137. 第 N 个泰波那契数
1137. 第 N 个泰波那契数 泰波那契序列 Tn 定义如下: T0 = 0, T1 = 1, T2 = 1, 且在 n >= 0 的条件下 Tn+3 = Tn + Tn+1 + Tn+2 给 ...
- ecshop刷新页面出现power by ecshop和链接的解决办法
当小伙伴在使用echop模板进行修改的时候,如果你删掉底部自带版权后,再调试程序刷新界面的时候,时不时就会冒出一个power by ecshop,而且是带有链接的,很不舒服,所以需要去掉,下面是最简单 ...
- jmeter旅程第一站:Jmeter抓包浏览器或者抓取手机app的包
学习jmeter?从实际出发,我也是一个初学者,会优先考虑先用来做一些简单的抓包.接口测试,在实践的过程中学习jmeter用途.那么接下来,这篇文章我会以jmeter抓包开启我的jmeter旅程. 这 ...