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 ...
随机推荐
- 快速模式第二包: quick_inI1_ouR1()
文章目录 1. 序言 2. quick_inI1_outR1()流程图 3. 快速模式消息②数据包格式 4. 源码分析 4.1 quick_inI1_outR1() 4.2 quick_inI1_ou ...
- 多Host情况下IDEA无法启动Tomcat的问题
学习Java Web,学到将WAR包部署到Tomcat中时,遇到一个问题. 部署WAR包的过程本身没什么问题,把.war文件放在<Tomcat安装目录>/webapps/中,然后修改< ...
- 使用easyui为tab页增加右键菜单
在使用easyui进行上左右布局一文中,我们已经使用easyui搭建起了一个简单的上左右布局.在使用的过程中,我们经常会遇到tab页打开的太多,但只能一个一个的关闭的烦恼,这个时候有没有想到eclip ...
- Vue开发多人聊天室 复盘总结
前言 在上个月初,接到一个需求,要开发一个 聊天通讯 模块 并且 集成到 项目中的多个 入口,实现业务数据的记录追踪. 接到需求后,还挺开心,这是我第一次 搞 通讯 类的需求,之前一直是 B 端 的业 ...
- rune和byte在处理字符/字符串中的应用.
rune和byte在处理字符/字符串中的应用. 定义: rune是int32的别名,-2147483648->2147483647,常用来表示UNICODE字符集,可以用来处理包含中文/非中文的 ...
- Vue3.x全家桶+vite+TS-搭建Vue3.x项目
目录 一.搭建基础项目 1.vite创建项目 3.运行项目 2.环境变量设置介绍 vite配置多环境打包 二.配置Router 1.安装路由 2.配置路由 3.引入 三.配置Vuex 1.安装vuex ...
- PTA——c++类与对象
对于给定的一个字符串,统计其中数字字符出现的次数. 类和函数接口定义: 设计一个类Solution,其中包含一个成员函数count_digits,其功能是统计传入的string类型参数中数字字符的个数 ...
- 数学相关函数在PHP中的应用简介
对于数学计算来说,最常见的其实还是我们使用各种操作符的操作,比如说 +加.-减 之类的.当然,PHP 中也为我们提供了一些可以方便地进行其他数学运算的操作函数.这些函数都属于 Math 扩展.这个扩展 ...
- vue实现事件代理(通过事件冒泡实现)
事件代理/事件委托以ul>li来模拟 使用冒泡的用法:使用冒泡的用法来实现事件代理 分离出来 动态根据索引添加类名:
- windom 下面redis安装和扩展安装
参考 https://www.cnblogs.com/yulongcode/p/10585229.html https://blog.csdn.net/qq_41921511/article/deta ...