分布式websocket解决方案

这篇具有很好参考价值的文章主要介绍了分布式websocket解决方案。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、websocket问题由来

websocket基础请自行学习,本文章是解决在分布式环境下websocket通讯问题。
在单体环境下,所有web客户端都是连接到某一个微服务上,这样消息都是到达统一服务端,并且也是由一个服务端进行响应,所以不会出现问题。
但是在分布式环境下,我们很容易发现,客户端连接的不是同一个后台微服务,这样就会导致一个问题是客户端与服务端发送和接收处理的服务不一致,因为客户端一旦与服务端建立连接,后续通讯就只能与该微服务通讯了,这样就不能实现通讯。
分布式websocket解决方案,分布式,websocket,网络协议,redis消息

2、解决方式

大家首先可能会想到使用分布式缓存来解决此问题,但是websocket的session(不明白session的先补充wensocket基础知识)是不允许被持久化的,这样就导致不能共享,导致消息发送失败。
解决方式有很多种,本本章介绍使用redis的发布订阅来解决分布式消息通讯问题。

分布式websocket解决方案,分布式,websocket,网络协议,redis消息"">

3、实现过程

3.1 引入依赖

以下是gradle依赖,使用maven依赖的同理

    compile 'org.springframework.boot:spring-boot-starter-web'
	//websocket
    compile 'org.springframework.boot:spring-boot-starter-websocket'
	compile 'org.springframework.boot:spring-boot-starter-thymeleaf'
	compile 'org.projectlombok:lombok'
	//redis
	compile 'org.springframework.boot:spring-boot-starter-data-redis'

3.2 负载均衡配置

负载均衡使用nginx,相关配置如下

代理对个微服务

upstream chat_server{
   
		server 127.0.0.1:9090;
		server 127.0.0.1:9091;
	}
location /ws {
   
			proxy_read_timeout 60;
			#proxy_connect_timeout 10;
			#proxy_send_timeout 60;
			#websocket长时间没有进行通讯时,在nginx达到默认超时时间后会自动断开,可增大超时时间,生产环境建议增加心跳检测解决
			#proxy_read_timeout 3600s;
			proxy_pass http://chat_server/ws;
			proxy_set_header Host $host:$server_port;
			proxy_set_header  X-Real-IP        $remote_addr;
			proxy_set_header  X-Forwarded-For  $proxy_add_x_forwarded_for;
			proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
			proxy_set_header Connection 'upgrade';
        }

由此负载均衡也配置完成。

3.3 后台服务实现

aplication.properties配置

server.port=9090
spring.application.name=netty-chat
server.servlet.context-path=/ws

#redis
spring.redis.host=192.168.202.133
spring.redis.port=6379
spring.redis.password=

整个代码目录
分布式websocket解决方案,分布式,websocket,网络协议,redis消息

redis发布订阅实现,见redis模块下;
websocket实现见,socket目录下;
源码见文章资源

3.4 前端服务实现

jquery资源自行下载文章来源地址https://www.toymoban.com/news/detail-648494.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta 

到了这里,关于分布式websocket解决方案的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【分布式事务】Seata 开源的分布式事务解决方案

    Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式,为用户打造一站式的分布式解决方案。 阿里巴巴作为国内最早一批进行应用分布式(微服务化)改造的企业,很早就遇到微服务架构下

    2024年02月02日
    浏览(53)
  • 分布式锁解决方案

    由于分布式或者集群部署项目时,在某些业务场景下需保证资源的原子性、一致性和互斥性。 如果把房子比作资源,通俗的来讲,我无论在那个城市生活,这个房子我先租的,再没有退房的前提下,别人都不能用 目前最流行的解决方案 redisson 分布式锁 zookeeper 分布式锁 mav

    2024年02月12日
    浏览(45)
  • 【SpirngCloud】分布式事务解决方案

    1.1 CAP 理论 1998年,加州大学的计算机科学家 Eric Brewer 提出,分布式系统有三个指标: Consistency(一致性):用户访问分布式系统中的任意节点,得到的数据必须一致 Availability(可用性):用户访问集群中的任意健康节点,必须能得到响应,而不是超时或拒绝 Partition tolerance(分区容

    2024年02月15日
    浏览(45)
  • Redis 分布式锁解决方案

    我们日常在电商网站购物时经常会遇到一些高并发的场景,例如电商 App 上经常出现的秒杀活动、限量优惠券抢购,还有我们去哪儿网的火车票抢票系统等,这些场景有一个共同特点就是访问量激增,虽然在系统设计时会通过限流、异步、排队等方式优化,但整体的并发还是

    2023年04月22日
    浏览(44)
  • 分布式ID解决方案对比

    在复杂的分布式系统中,往往需要对大量的数据进行唯一标识,比如在对一个订单表进行了分库分表操作,这时候数据库的自增ID显然不能作为某个订单的唯一标识。除此之外还有其他分布式场景对分布式ID的一些要求: 趋势递增:  由于多数RDBMS使用B-tree的数据结构来存储索

    2024年02月04日
    浏览(38)
  • ChatGPT:分布式事务解决方案

    随着互联网的发展和技术的不断更新,越来越多的应用程序开始采用分布式架构。然而,由于数据和处理逻辑的分散性和异构性,分布式环境下的事务处理面临着许多挑战。这时候就需要采用分布式事务来确保系统的一致性和可靠性。 分布式事务是指在分布式系统中,涉及多

    2023年04月12日
    浏览(86)
  • 浅谈分布式事务及解决方案

    在讲述分布式事务的概念之前,我们先来回顾下事务相关的一些概念。 就是一个程序执行单元,里面的操作要么全部执行成功,要么全部执行失败,不允许只成功一半另外一半执行失败的事情发生。例如一段事务代码做了两次数据库更新操作,那么这两次数据库操作要么全部

    2024年02月08日
    浏览(48)
  • 聊聊分布式解决方案Saga模式

    Saga模式使用一系列本地事务来提供事务管理,而一个本地事务对应一个Saga参与者,在Saga流程里面每一个本地事务只操作本地数据库,然后通过消息或事件来触发下一个本地事务,如果其中一个本地事务失败了,Saga就会执行一系列补偿事务来实现回滚操作。(补偿事务简单来

    2024年02月06日
    浏览(36)
  • 无限容量分布式文件存储解决方案

    常见分布式文件系统比较 常见的分布式文件系统有GFS、HDFS 、Ceph 、GridFS 、TFS、FastDFS等。各自适用于不同的领域。 类 Google FS 都支持文件冗余备份,例如 Google FS、TFS 的备份数是 3。一个文件存储到哪几个存储结点,通常采用动态分配的方式。采用这种方式,一个文件存储到

    2024年02月11日
    浏览(46)
  • 分布式锁-Redis红锁解决方案

    分布式锁(多服务共享锁) 在分布式的部署环境下,通过锁机制来让多客户端互斥的对共享资源进行访问控制分布式系统不同进程共同访问共享资源的一种锁的实现。如果不同的系统或同一个系统的不同主机之间共享了某个临界资源,往往需要互斥来防止彼此干扰,以保证一

    2024年02月06日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包