使用tomcat方式实现websocket即时通讯服务端讲解
使用tomcat方式实现websocket即时通讯服务端讲解
第一种方案:使用Tomcat的方式实现
tomcat版本要求:tomcat7.0+。需要支持Javaee7
导入javeee-api的jar(如果已经引入可以忽略):
pom.xml中加入:
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>7.0</version>
<scope>provided</scope>
</dependency>
一:几个重要的注解(方法):
1.1:@ServerEndpoin():
声明这是一个websocket服务;
需要指定访问该服务的地址。
在地址中可以指定参数,需要使用{}进行占位。
注解使用位置:类上面
示例:
@ServerEndpoin("/websocket/{userId}")
public class myTest(){
}
1.2:@OnOpen:
该方法将在建立连接后执行,会传入session对象;
可以通过@PathParam来获取url声明中参数
注解使用位置:方法中
用法示例:
public void onOpen(Session session,@PathParam("userId") Integer userId) throws IOExcepthon{}
1.3:@OnClose:
该方法是在连接关闭后执行的
注解位置:方法上
使用示例:
public void onClose(){}
1.4:@OnMessage:
该方法用于接收客户端发来的消息
参数:
message:发来的消息数据
session:会话对象(也即是通道)
注解位置:方法
示例用法:
public void onMessage(String message,Session session) throws IOException{}
1.5:@OnError:
出错的时候访问的。
注解位置:方法上
使用示例:
public void onError(Session session,Throwable error){}
1.6:给客户端返回消息(或是给客户端发送消息):
使用session对象的getBasinRemoter().sendTest()方法
用法示例:
session.getBasicRemoter().sendText("您发送的消息已经收到了");
二:根据上面几个重要方法,编写客户端代码:
@OnOpen
public void onOpen(Session session, @PathParam("userName") String userName) throws IOException {
log.info("=== 打开连接了===");
session.getBasicRemote().sendText("欢迎:"+userName+"访问系统");
}
@OnMessage
public void onMessage(String message,Session session, @PathParam("userName") String userName) throws IOException {
log.info("==接收到客户端发来的消息是:{}",message);
session.getBasicRemote().sendText("您好:"+userName+" 您发送的消息"+message+",系统已经收到....");
}
访问效果:
说明:websocket访问的协议是ws://而非http://
上图中:橙色的是我发送的,下面对应的就是系统返回的。
查看服务器日志打印:
我们可以看到,通信已经建立了。代码已经放在git上了。欢迎大家一起学习。
下节预告:下节我们将使用spring框架来整合websocket的
使用tomcat方式实现websocket即时通讯服务端讲解的更多相关文章
- Golang 在电商即时通讯服务建设中的实践
马蜂窝技术原创文章,更多干货请搜索公众号:mfwtech 即时通讯(IM)功能对于电商平台来说非常重要,特别是旅游电商. 从商品复杂性来看,一个旅游商品可能会包括用户在未来一段时间的衣.食.住.行等 ...
- Springboot 项目源码 Activiti6 工作流 vue.js html 跨域 前后分离 websocket即时通讯
特别注意: Springboot 工作流 前后分离 + 跨域 版本 (权限控制到菜单和按钮) 后台框架:springboot2.1.2+ activiti6.0.0+ mybaits+maven+接 ...
- java SSM框架 代码生成器 快速开发平台 websocket即时通讯 shiro redis
A代码编辑器,在线模版编辑,仿开发工具编辑器,pdf在线预览,文件转换编码 B 集成代码生成器 [正反双向](单表.主表.明细表.树形表,快速开发利器)+快速表单构建器 freemaker模版技术 , ...
- 开源jabber(XMPP)架设内部即时通讯服务的解决方案
Jabber 是著名的即时通讯服务服务器,它是一个自由开源软件,能让用户自己架即时通讯服务器,可以在Internet上应用,也可以在局域网中应用. XMPP(可扩展消息处理现场协议)是基于可扩展 ...
- 通过开启子进程的方式实现套接字服务端可以并发的处理多个链接以及通讯循环(用到了subprocess模块,解决粘包问题)
今日作业:通过开启子进程的方式实现套接字服务端可以并发的处理多个链接以及通讯循环(用到了subprocess模块,解决粘包问题) server(服务端) import socket from mult ...
- .net平台 基于 XMPP协议的即时消息服务端简单实现
.net平台 基于 XMPP协议的即时消息服务端简单实现 昨天抽空学习了一下XMPP,在网上找了好久,中文的资料太少了所以做这个简单的例子,今天才完成.公司也正在准备开发基于XMPP协议的即时通讯工具 ...
- WebSocket——SuperWebSocket实现服务端和客户端
WebSocket——SuperWebSocket实现服务端和客户端具体实现如下: 注:本作者是基于vs2019 enterprise版本,所有项目均为.Net Framwork4.7版本(因为Web ...
- [重磅开源] 比SingleR更适合的websocket 即时通讯组件---ImCore开源了
有感而发 为什么说 SignalR 不合适做 IM? IM 的特点必定是长连接,轮训的功能用不上. 因为它是双工通讯的设计,用hub.invoke发送命令给服务端处理业务,其他就和 ajax 差不多, ...
- ActiveMQ 即时通讯服务 浅析
一. 概述与介绍 ActiveMQ 是Apache出品,最流行的.功能强大的即时通讯和集成模式的开源服务器.ActiveMQ 是一个完全支持JMS1.1和J2EE 1.4规范的 JMS Provi ...
随机推荐
- Mybatis(1)-初识mybaits
一.概述 1.概述 mybatis 是一个优秀的基于 java 的持久层框架,它内部封装了 jdbc,使开发者只需要关注 sql 语句本身, 而不需要花费精力去处理加载驱动.创建连接.创建 state ...
- java web实现在线编辑word,并将word导出(三)
前面说到前台呈现的页面是img标签,因此需要在后台生成相应的图片,在img的src内容中改为相应的路径地址:而在生成文档的过程中需要替换相应的img标签.后一部分上篇文章已经讲过,本片主要讲前一部分. ...
- 科学 multi port
issues/679 create new UUID cat /proc/sys/kernel/random/uuid example config : multi port , multi user ...
- 技术沙龙|京东云DevOps自动化运维技术实践
自动化测试体系不完善.缺少自助式的持续交付平台.系统间耦合度高服务拆分难度大.成熟的DevOps工程师稀缺,缺少敏捷文化--这些都是DevOps 在落地过程中,或多或少会碰到的问题,DevOps发展任 ...
- 吴裕雄--天生自然 PHP开发学习:类型比较
<?php if(42 == "42") { echo '1.值相等'; } echo PHP_EOL; // 换行符 if(42 === "42") { ...
- Android进阶——多线程系列之Semaphore、CyclicBarrier、CountDownLatch
今天向大家介绍的是多线程开发中的一些辅助类,他们的作用无非就是帮助我们让多个线程按照我们想要的执行顺序来执行.如果我们按照文字来理解Semaphore.CyclicBarrier.CountDownL ...
- Android 心跳包心跳连接 如何实现android和服务器长连接呢?推送消息的原理
前言:现在的大多数移动端应用都有实时得到消息的能力,简单来说,有发送消息的主动权和接受消息的被动权.例如:微信,QQ,天气预报等等,相信好处和用户体验相信大家都知道吧. 提出问题:这种功能必须涉及cl ...
- zTree & ckeditor &ValidateCode.jar 使用个人心得总结
zTree:依靠 jQuery 实现的多功能 “树插件”. 使用时只需要将下载的压缩包接用,复制里边的css 和 js 到指定目录即可. 如图所示: 在zTree的官网可以找到各种类型树的示例: 地址 ...
- POJ 1850:Code 组合数学
Code Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 8710 Accepted: 4141 Description ...
- Linux-常见信号介绍
1.SIGINT 2 Ctrl + C时OS送给前台进程组中每个进程 2.SIGABRT 6 调用abort函数,进程异常终止 3 ...