使用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即时通讯服务端讲解的更多相关文章

  1. Golang 在电商即时通讯服务建设中的实践

    马蜂窝技术原创文章,更多干货请搜索公众号:mfwtech ​即时通讯(IM)功能对于电商平台来说非常重要,特别是旅游电商. 从商品复杂性来看,一个旅游商品可能会包括用户在未来一段时间的衣.食.住.行等 ...

  2. Springboot 项目源码 Activiti6 工作流 vue.js html 跨域 前后分离 websocket即时通讯

    特别注意: Springboot 工作流  前后分离 + 跨域 版本 (权限控制到菜单和按钮) 后台框架:springboot2.1.2+ activiti6.0.0+ mybaits+maven+接 ...

  3. java SSM框架 代码生成器 快速开发平台 websocket即时通讯 shiro redis

    A代码编辑器,在线模版编辑,仿开发工具编辑器,pdf在线预览,文件转换编码 B 集成代码生成器 [正反双向](单表.主表.明细表.树形表,快速开发利器)+快速表单构建器 freemaker模版技术 , ...

  4. 开源jabber(XMPP)架设内部即时通讯服务的解决方案

    Jabber 是著名的即时通讯服务服务器,它是一个自由开源软件,能让用户自己架即时通讯服务器,可以在Internet上应用,也可以在局域网中应用.    XMPP(可扩展消息处理现场协议)是基于可扩展 ...

  5. 通过开启子进程的方式实现套接字服务端可以并发的处理多个链接以及通讯循环(用到了subprocess模块,解决粘包问题)

    今日作业:通过开启子进程的方式实现套接字服务端可以并发的处理多个链接以及通讯循环(用到了subprocess模块,解决粘包问题) server(服务端) import socket from mult ...

  6. .net平台 基于 XMPP协议的即时消息服务端简单实现

    .net平台 基于 XMPP协议的即时消息服务端简单实现 昨天抽空学习了一下XMPP,在网上找了好久,中文的资料太少了所以做这个简单的例子,今天才完成.公司也正在准备开发基于XMPP协议的即时通讯工具 ...

  7. WebSocket——SuperWebSocket实现服务端和客户端

    WebSocket——SuperWebSocket实现服务端和客户端具体实现如下: 注:本作者是基于vs2019 enterprise版本,所有项目均为.Net Framwork4.7版本(因为Web ...

  8. [重磅开源] 比SingleR更适合的websocket 即时通讯组件---ImCore开源了

    有感而发 为什么说 SignalR 不合适做 IM? IM 的特点必定是长连接,轮训的功能用不上. 因为它是双工通讯的设计,用hub.invoke发送命令给服务端处理业务,其他就和 ajax 差不多, ...

  9. ActiveMQ 即时通讯服务 浅析

      一. 概述与介绍 ActiveMQ 是Apache出品,最流行的.功能强大的即时通讯和集成模式的开源服务器.ActiveMQ 是一个完全支持JMS1.1和J2EE 1.4规范的 JMS Provi ...

随机推荐

  1. 屏幕切换 onStart() onStop() onRestart() onDestroy()

    android:configChanges="orientation|keyboardHidden|screenSize"          //xml文件<activity ...

  2. Mac系统Snail SVN 精简版配置比较、合并工具:Beyond Compare及破解

    Mac系统 Beyond Compare及破解 前言 在上一篇文章:Mac系统的SVN客户端:Snail SVN 精简版 介绍了在mac系统中svn客户端使用的是snail svn,但是当我想要把本地 ...

  3. PyTorch实战:经典模型LeNet5实现手写体识别

    在上一篇博客CNN核心概念理解中,我们以LeNet为例介绍了CNN的重要概念.在这篇博客中,我们将利用著名深度学习框架PyTorch实现LeNet5,并且利用它实现手写体字母的识别.训练数据采用经典的 ...

  4. core_cm4.h(129): error: #35: #error directive: "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"

    今天使用 systick 的时候,只使用了头文件 core_cm4.h,结果就报错了,原因是 __FPU_PRESENT 没有定义,这个定义其实在 stm32f4xx.h 里面.所以如果要解决这个错误 ...

  5. tensorflow应用于手写数字识别(第二版)

    import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_data#载入数据集 mnist = inp ...

  6. 在h5页面上添加音乐播放

    接到需求说要做一个h5轮播图,同时配上背景音乐. Html部分: <!--音乐开始--> <div id="music"> <div id=" ...

  7. CSU_1414 Query On a Tree BFS序+DFS时间戳进行预处理

    2014 csu校赛 I 题,比赛的时候拿着他看了几个小时愣是没弄出好的方法,我们也想过统计出每个root的节点总数,然后减去离它d层的子节点的数目,即为答案.但是因为树的存储是无序的,所以每次为了找 ...

  8. Golang的学习方法

  9. 关于debug模式下对象toString报空指针的问题。Method threw 'java.lang.NullPointerException' exception. Cannot evaluate cn.gooday.jsh.service.common.dto.RestControllerResult.toString()

    这个如果debug的时候可以一步步走到正常return或者运行的时候有正确返回值.说明代码是没问题的. 出现这个的原因是dto对象里有一些字段查出来是空的,或者这个字段本来在dto里就是冗余字段. 因 ...

  10. PAT B1095 解码PAT准考证

    半个月了,每天做几道题PAT基础题,终于把基础的95道题目做完了.总体来说,没有太难的东西,偶尔几个题目有点复杂而已. 加油,离3月份的考试越来越近了,还有155道题目等着我呢!!! B_1095题目 ...