web聊天室2


业务背景:张三要发消息给李四
实现:
(1)客户端点到点发消息
(2)服务器转发消息(采用这个)
在这里插入图片描述

1,张三发消息给服务器
2,服务器发消息给李四 使用http协议是不行的 (服务器的ip是开发在公网,所有人能访问,客户端的IP不开放,服务端不知道)

websocket实现的消息推送流程

客户端和服务端建立连接

客户端和服务端建立连接 只能客户端发起请求建立,双方建立连接

客户端js代码
在这里插入图片描述
new websocket:双方建立连接(双方通知打开连接的回调函数执行)
客户端建立回调
在这里插入图片描述
服务端建立回调:
在这里插入图片描述

双方通信都是全双工,客户端和服务端既可以发消息,也可以收消息

客户端服务端发送消息

客户端发送消息:websocket.send(message);
在这里插入图片描述

服务端发送消息:session.getBasicRemote().sendText(message)
在这里插入图片描述

session建立连接之后就有的会话对象
只要我们有session引用就可以发消息
session会话,是websocket的会话(长连接没关闭就是一个会话)和Servlet的session不一样

客户端服务端接收信息

客户端接收消息:
在这里插入图片描述
服务端接收消息
在这里插入图片描述
双方接收消息:被动接收消息(事件驱动的异步回调)
客户端:张三发送消息事件中,调用客户端websocket.send(message);
服务端:接收张三发送的消息
服务器发送消息给李四
客户端:李四接收消息

当前项目需要把张三发送的消息转发到所有的客户端,前端去过滤某个消息频道的消息。
前端保存有所有接收的消息,用户进入某个频道后,在接收的消息列表中,过滤并显示
分析业务:前后端接口设计和数据库表的设计

用户相关接口:

1.注册
2.登录 输入账号密码,点击登录按钮后,调用的接口
3.检查是否已登陆 页面初始化后,调用的接口

分析以上接口

输入url访问页面
调用检查登录状态接口
显示登陆 注册按钮

调用检查登录状态接口:

获取session,再获取保存的用户信息
HttpSession s = request.getSession(false);
Useru =(User) s.getAttribute(“键”);登录时设置的键
在这里插入图片描述

响应 OK:true显示登陆信息
响应 OK:false显示登陆,注册按钮、

校验账号密码通过:

创建一个session, 保存用户信息
HttpSession S = request.getSession();
s.setAttribute(“键”,用户信息);

登录接口和检查登陆状态接口,如果返回的响应数据为OK或true,用户登录成功

以上业务客户端接收消息有两个场景
(1)上次登录以后的消息----数据库查询(发送的消息要保持在数据库)
-------服务端建立连接事件中
(2)新的消息------------服务端接收消息事件中 所有客户端转发消息
需要考虑:服务的在什么时候/代码中发送,客户端在什么地方接收,消息在服务端什么地方保存。

关于序列号和反序列化

结合网络中协议去理解
网络传输数据,发送方要封装数据格式,接收方要使用相同数据格式解析,协议是大家都公认的,用途非常广泛的数据格式
序列化和反序列化也是类似的,网络传输数据,不同设备间传输数据使用。
某个语言中特定的数据保存方式(如Java就是对象),发送给其他主机(网络数据传输),或者其他设备(比如内存)
反序列化就是反向的过程:接收的数据格式转变为自己程序的数据方式(Java就是对象)

jdbc操作:
(1)占位符替换:使用变量,对象中的属性
(2)查询操作,返回的结果集,多行数据,转换为<List类型> 多个对象,一个数据,转换为一个对象

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值