使用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. C语言-浮点类型

    C语言-浮点类型 浮点类型 在0的两侧有一小块区域,这个区域非常接近0,但是不等于0,是float(表达范围数量级10^-38^)或者double(达范围数量级10^-308^)无法表达的,而0是可以 ...

  2. Python 官方推荐的一款打包工具

    译者:Jiong 链接: https://robots.thoughtbot.com/how-to-manage-your-python-projects-with-pipenv 在thoughtbo ...

  3. 【每日Scrum】第十天冲刺

    一.计划会议内容 尝试整合代码 二.任务看板 任务看板 已完成:登录与个人界面布局实现,UI设计美化,地图主界面 进行中:功能整合, 待进行:连接数据库 三.scrum讨论照片 四.产品的状态 无 五 ...

  4. Codeforces_448C 分治

    昨晚CF碰到的题目,昨晚CF跪了啊啊啊 题意比较简单,给定一排挨在一起的板子,宽度都为1,高度不一,一个刷子宽度也是1,可以横着刷,也可以竖着刷,但是任何时刻刷子都要在板子上,也就是说,如果横向的时候 ...

  5. 科学 multi port

    issues/679 create new UUID cat /proc/sys/kernel/random/uuid example config : multi port , multi user ...

  6. 201909-2 小明种苹果(续) Java

    思路: 待补充 import java.util.*; public class Main { public static void main(String[] args) { Scanner sc ...

  7. mysql第四篇:数据操作之单表查询

    单表查询 一.简单查询 -- 创建表 DROP TABLE IF EXISTS `person`; CREATE TABLE `person` ( `id` ) NOT NULL AUTO_INCRE ...

  8. ABP JTable如何显示序列号

    显示序列号 recordsLoaded: function (event, data) { var SrNo = 0; if (data.records) { $.each(data.records, ...

  9. css选择器,选择指定属性的值

    选择属性为href的值: <a class='test' href='www.baidu.com' >test</a> response.css('.test::attr(hr ...

  10. UML-用例关联

    1.用例关联:就是各个用例之间的关系,分3种关系分别是:包含关系.扩展关系.泛化关系. 2.包含关系 1).示例 2).使用场景 A.用例在其他用例中重复使用 B.用例非常复杂冗长,将其分解为子单元便 ...