基于Tornado的Websocket集群

11 篇文章 0 订阅
3 篇文章 0 订阅

背景

我们部署单点websocket服务时很简单就可以实现,但是现实中的业务往往对性能要求非常高, 因此单点服务并不能满足我们的需求,所以我们需要横向的扩展服务,来满足性能要求。

举个简单的例子,我们建立一个简单的聊天室,人数少的时候可以正常提供服务,但当聊天的人数超过单台服务器所能服务的数量时,服务器就不能提供相应的服务。我们可以通过提高服务器的配置来继续满足,但是提升配置后依然会达到上限。所以我们需要提供分布式的websocket服务,不再集中在一台服务器上,我们可以通过横向扩展,在多台服务器上部署相同的服务,来满足我们的扩展需求。

设计

原理

Websocket服务中正常启动后,每个用户连接后会一直存在,因此连接要保存在内存中,并在服务中管理起来,根据不同的需要,服务确定是否要通知集群中其他连接信息

基本的原理

  1. websocket服务中,单独启用一个线程来订阅MQ,线程中收到订阅,根据业务需求来确定通知所有连接与否。

  2. 单独提供一个RabbitMQ服务

    • 接收websocket的发送业务处理集群的消息
    • 接收业务处理集群发送websocket的消息,这里采用的是广播,不再对业务中进行判断是否发送,由websocket服务判断是要发送给哪个连接
  3. 业务服务集群,监听mq提供的业务处理消息,然后再将结果发送到websocket订阅的消息队列中。

架构图

在这里插入图片描述

代码

关注微信公众号:战渣渣
回复关键字 “ws集群” 获取源码

Tornado是一个Python的Web框架,它支持异步编程和非阻塞IO操作。Tornado中的WebSocket是一种实现了全双工通信的协议,它允许服务器和客户端之间进行实时的双向通信。 在Tornado中使用WebSocket,你可以通过继承tornado.websocket.WebSocketHandler类来创建一个WebSocket处理器。WebSocketHandler提供了一些方法来处理WebSocket连接的不同事件,例如连接建立、消息接收和连接关闭等。 以下是使用TornadoWebSocket的一般步骤: 1. 创建一个WebSocket处理器类,继承自tornado.websocket.WebSocketHandler。 2. 在处理器类中实现on_message()方法,用于处理接收到的消息。 3. 在处理器类中实现open()方法,用于处理WebSocket连接建立时的操作。 4. 在处理器类中实现on_close()方法,用于处理WebSocket连接关闭时的操作。 5. 在Tornado应用程序中定义路由,将URL映射到WebSocket处理器类。 6. 启动Tornado应用程序。 下面是一个简单的示例代码,演示了如何在Tornado中使用WebSocket: ```python import tornado.websocket import tornado.web import tornado.ioloop class WebSocketHandler(tornado.websocket.WebSocketHandler): def open(self): print("WebSocket连接建立") def on_message(self, message): print("接收到消息:", message) self.write_message("服务器已收到消息:" + message) def on_close(self): print("WebSocket连接关闭") app = tornado.web.Application([ (r"/websocket", WebSocketHandler), ]) if __name__ == "__main__": app.listen(8888) tornado.ioloop.IOLoop.current().start() ``` 在上面的示例中,我们创建了一个WebSocket处理器类WebSocketHandler,并实现了open()、on_message()和on_close()方法来处理不同的事件。在应用程序中,我们将URL "/websocket" 映射到WebSocketHandler类。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值