使用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. BZOJ 4901 [CTSC2017]网络

    题解: 只会O(n log^2 n) O(n log n)先留坑 不开long long 0 分!!!! #include<iostream> #include<cstdio> ...

  2. npm、yarn 简单使用记录

    npm.yarn常用命令记录,后续会陆续补充... 经过使用发现yarn再下包是速度快,所以日常以yarn指令应用为主 npm查看仓库地址:npm config get registrynpm设置淘宝 ...

  3. SQL中的LEFT/RIGHT/SUBSTRING函数

    语法: LEFT(field,length) RIGHT(field,length)SUBSTRING(field,start,length) LEFT/RIGHT函数返回field最左边/最右边的l ...

  4. Swift轮播控件快速入门——FSPagerView

    2018年03月01日 19:17:42 https://blog.csdn.net/sinat_21886795/article/details/79416068 今天介绍一个IOS的轮播控件FSP ...

  5. leetcode406 ,131,1091 python

    LeetCode 406. Queue Reconstruction by Height 解题报告题目描述Suppose you have a random list of people standi ...

  6. centos 7.4 磁盘空间不足,扩容根分区 --lvm模式

    背景:根分区磁盘空间不足,需要扩容root磁盘空间 1.查看现有磁盘信息,可以看出根分区有26G [root@localhost ~]# df -h 2.查看新增加的磁盘信息(改虚拟机已经添加好了,不 ...

  7. 了解redis

    redis:非关系型数据库,基于内存高性能,key-value存储,一般用作缓存,开源的使用ANSI C语言编写,遵守BSD协议,支持网络,可基于内存亦可持久化的日志型.Key-Value数据库,并提 ...

  8. Linux误删所有内核,恢复内核的解决办法

    前言 我用df -h命令查看磁盘使用情况的时候发现,系统根目录空间已经比较小了,于是我就使用clean命令对系统内核进行清理,一不小心,就把所有的内核删除了,你很有可能也是我的这种经历,非常的崩溃.好 ...

  9. settings配置数据库和日志

    数据库的配置: 一.mysql配置 pip下载pymysql,用于mysql和django的连接. 在init.py上配置pymsqy. import pymysql pymysql.install_ ...

  10. 吴裕雄--天生自然MySQL学习笔记:MySQL 排序

    从 MySQL 表中使用 SQL SELECT 语句来读取数据. 如果我们需要对读取的数据进行排序,我们就可以使用 MySQL 的 ORDER BY 子句来设定你想按哪个字段哪种方式来进行排序,再返回 ...