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 ...
随机推荐
- ClientValidationFunction
CustomValidator.ClientValidationFunction 属性 获取或设置用于验证的自定义客户端脚本函数的名称. 命名空间: System.Web.UI.WebContro ...
- RabbitMQ-TTL-死信队列_DLX
1. 简介 死信队列,简称:DLX,Dead Letter Exchange(死信交换机),当消息成为Dead message后,可以被重新发送到另外一个交换机,这个交换机就是DLX. (一般会将DL ...
- (2)java Spring Cloud+Spring boot+mybatis企业快速开发架构之SpringCloud-Spring Cloud是什么?Spring Cloud版本介绍
Spring Cloud 是一系列框架的有序集合.它利用 Spring Boot 的开发便利性,巧妙地简化了分布式系统基础设施的开发,如服务注册.服务发现.配置中心.消息总线.负载均衡.断路器.数 ...
- 编译执行 VS 解释执行
一般编译程序从对源程序执行途径的角度不同,可分为解释执行和编译执行. 所谓解释执行是借助于解释程序完成,即按源程序语句运行时的动态结构,直接逐句地边分析边翻译并执行.像自然语言翻译中的口译,随时进行翻 ...
- 308 day06_线程、同步
day06 [线程.同步] 主要内容 线程 同步 线程状态 教学目标 能够描述Java中多线程运行原理 能够使用继承类的方式创建多线程 能够使用实现接口的方式创建多线程 能够说出实现接口方式的好处 ...
- POJ3625Building Roads
Building Roads Description Farmer John had just acquired several new farms! He wants to connect the ...
- php超时报错: Maximum execution time of 300 seconds exceeded
php.ini里max_execution_time = 30,原因是这个脚本执行时间太小了,增加一些,或者改成0不限制 可以增加代码: set_time_limit(0);
- Linux服务器通用安全加固指南
一.基本系统安全 1.保护引导过程(以Grub引导为例) 在 /etc/inittab 中添加 sp:S:respawn:/sbin/sulogin,以确保当切换到单用户模式时 运行级的配置要求输入 ...
- 鸿蒙内核源码分析(编译环境篇) | 编译鸿蒙看这篇或许真的够了 | 百篇博客分析OpenHarmony源码 | v50.06
百篇博客系列篇.本篇为: v50.xx 鸿蒙内核源码分析(编译环境篇) | 编译鸿蒙防掉坑指南 | 51.c.h.o 编译构建相关篇为: v50.xx 鸿蒙内核源码分析(编译环境篇) | 编译鸿蒙防掉 ...
- Loj#2769-「ROI 2017 Day 1」前往大都会【最短路树,斜率优化】
正题 题目链接:https://loj.ac/p/2769 题目大意 给出\(n\)个点\(m\)条地铁线路,每条线路是一条路径. 求\(1\)到\(n\)的最短路且在最短路径的情况下相邻换乘点的距离 ...