消息服务器websocket高并发分布式swoole 架构思路

消息服务器websocket高并发分布式swoole 架构思路,第1张

消息服务器使用socket,为避免服务器过载,单台只允许500个socket连接,当一台不够的时候,扩充消息服务器是必然,问题来了,如何让链接在不同消息服务器上的用户可以实现消息发送呢?

要实现消息互通就必须要让这些消息服务器本身能互通,想了两个方式,一种是消息服务器之间交叉链接,另一种是增加一个特殊的消息服务器,这个消息服务器不对外开放,只负责消息转发和推送。

下列测试不考虑防火墙等。仅测试可行性和效率。

消息服务器

转发服务器

公共缓存

软件环境

client1 可向 client2 或者其他 client 发送消息,并接收其他 client 发送的消息.

Redis 中保存 client 连接的信息,给每个用户分配唯一的 key ,包括链接的哪台服务器,转发服务器定时检测消息服务器,如消息服务器挂掉,由转发服务器清理掉Redis已经挂掉的所有链接。

1. Client1 给 Client2 发送一条消息

2. Socket1 接收到消息,根据 key从Redis 取出 Client2 的连接信息,连接在本机,直接推送给 Client2 ,流程结束。

3.如果连接不在本机,把消息推送到转发服务器,由转发服务器把该消息推送给连接所在消息服务器,消息服务器接收消息,推送给 Client2 。

服务器上创建一个server.php,内容如下:

上只需把ip变更一下即可。192.168.0.201变更为192.168.0.202.

在转发服务器上建立脚本proxy.php,内容如下:

注意开启顺序

1.开启转发服务器php proxy.php

2.分别开启socket服务器php server.php

可以在转发服务器上看到两个消息服务器已经连接

3.开始测试,分别打开两个telnet,连接两个消息服务器,发送消息测试:

登陆

基于强大的 swoole 扩展,让php高效的实现这些成为可能,目前消息服务器到转发服务器是长连接,转发服务器到消息服务器是短连接,存在性能瓶颈,也浪费了连接资源。下一步改造成长连接,消息服务器的client使用异步。

1、QQ之间的消息是通过百TCP协议和UDP协议进行传递的。

2、但这TCP协议和UDP协议不仅仅是我们通用的协议,腾迅还在这些协议上加了一些自己的东西,度也就是双方必须遵守相同的协议才能通知讯,即必须用腾讯给我们的客户端才能连上腾讯的服务器进行聊天。

3、因为UDP协议是不可靠传输,因道此采用UDP协议的信息在传送过程中很容专易丢失,所以QQ使用辅助算法实现包重传机制以保证信息不会丢失。当消息在客户间直接传送无法到达属时就才使用TCP协议通过服务器中转。

扩展资料:

QQ通讯原理:

QQ有两种登录模式

一种是比较不常用的:直接登录服务器,所有信息由服务器转发。

这种登陆模式有个特点就是会发现使用获取IP版本的QQ无法获取对方的IP。

另一种是普通的:首先连接登录服务器,再给对发发消息的时候,首先尝试与对方进行打洞连接,如果可以打通消息直接发送给对方,如果不能打通,则消息转发服务器,由服务器转发。

QQ是一个基于TCP/UDP协议的通讯软件,在TCP/IP协议中唯一标识一个应用进程的是socket,它通过网络层的制IP地址和传输层的端口号来实现,对与同一个IP地址的内部网络,通过不同的端口号来标识不同的QQ进程。

当登录QQ服务器的时候 服务器会保留IP地址和端口号信息,并在好友的QQ进程中进行列表显示 然后两个进程就可以通信了。

发送文件的计算机首先要通过消息服务器将其IP地址发送给接收计算机,当接收计算机同意接收的确认消息反馈到消息服务器后,消息服务器将据此设置好文件传输对话,发送计算机与接收计算机就会在确定好的端口范围内,建立起TCP或UDP连接开始文件的检索与传输。

Tuxedo介绍 原创

2016-04-02 21:23:02

11点赞

waterxcfg304

码龄14年

关注

1、Tuxedo介绍

Tuxedo 是什么?

Tuxedo是BEA公司(现已被Oracle公司收购)的一个客户机/服务器的“中间件”产品,它在客户机和服务器之间进行调节,以保证正确地处理事务。它用C语言技术开发的并且有很高性能。

TUXEDO是在、Internet 这样的分布式运算环境中开发和管理三层结构的客户/服务器型关键任务应用系统的强有力工具。它具备分布式事务处理和应用通信功能,并提供完善的各种服务来建立、运行和管理关键任务应用系统。开发人员能够用它建立跨多个硬件平台、数据库和操作系统的可互操作的应用系统。

Tuxedo 的主要作用是:

屏蔽分布式环境中各种通信协议、硬件体系结构、操作系统、数据库和其它应用服务等方面的差异,使分布于网络节点上的应用程序的各个单元部件之间能够进行互操作,并协调操作的一致性和完整性,最大限度地节省系统资源,提高系统性能。

* Tuxedo 已经广泛地应用于金融、电信、制造业等各行各业的核心业务系统。

三层架构

从左边往右依次为:客户端层(表现层),中间件服务层(业务逻辑层),数据库服务器层(数据层)。这种典型的三层架构应用非常广泛。对于应用weblogic中间件的系统一般采用的B/S架构,绝大部分采用HTTP协议,少量的系统用java编写的客户端,使用的是RMI 协议,或J2EE里的其它协议。

对于tuxedo中间件使用的是tuxedo协议,前端开发工具可以是各式各样,VC++ 、java 、Delphi 、VB 等。

Tuxedo 的通讯过程

Tuxedo 服务器处理请求的方式与apache有本质的区别。

Apache服务器处理请求,由客户端发出请求到服务器,由服务器对请求进行处理后将数据返回给客户端。

Tuxedo 服务器一次请求需要两次进行两次交互,Tuxedo有两个负责通讯的进程,一个为WSL,WSL的数量可以进行配置,典型的配置一般两、三个;WSH可以有N多个。客户端通过IP地址和端口号与WSL建立连接,由WSL认证请求是否合法,在WSL的响应中包含了另外一个IP地址和端口号;然后,客户端通过拿到的新的IP地址和端口号去请求WSH 。

客户端程序由GUI 与 Tuxeo通讯两部分组成,GUI部分主要由开发人员关心如何设计,通讯部分可能设计成几个函数供开发人员调用。对于性能测试人员可能更关心客户端与服务器之间的通讯过程。

2、tuxedo相关概念

IPC: Inter-Process Communication 进程间通信: 管道、信号量(semaphore)、共享内存(shared memory)、消息队列(Message Queue)。

管道是UNIX系统IPC的最古老形式,数据只能单向流动。

Tuxedo在客户机和服务器通信中大量使用UNIX系统的消息队列。

SSSO(Single Server Single Queue)模式:每个客户机都有一个响应队列来接受客户端请求。

MSSO(Multiple Server Single Queue)模式:多个服务器共享同一个请求队列。

信号量包含一个计数器,表示某个资源正在被访问和访问的次数,用来控制多线程对共享数据的访问。

Tuxedo使用共享内存存储公告牌,用来公告进程状态信息和需要在进程间共享或传递的数据。

-------------------------------------------------------------

Tuxedo的配置文件称为UBBCONFIG或ubb,包含了域(Domain)、逻辑机器(Machine)、服务器组(Group)、服务进程(Server)、服务(Service)的定义。运行前,需要把UBBCONFIG装载成二进制文件,称为TUXCONFIG。

Tuxedo服务启动时,执行tpsvrinit()函数,可以打开一些如数据库之类的资源供以后使用

Tuxedo服务停止时,执行tpsvrdown()函数,关闭资源

服务程序调用tpreturn()函数来结束服务请求,并返回一个缓冲区,必要时,将它传给客户程序。

--------------------------------------------------------

ATMI环境支持的C/S通信方式:请求/应答式通信、回话通信、队列通信、事件代理通信、消息通知

请求/应答式通信:同步调用(tpcall)、异步调用(tpacall)、嵌套调用、转发调用(tpforward)

转发调用和嵌套调用类似,不同的是最里层的嵌套服务可以直接给客户程序一个响应,而不必按照调用栈 逐级返回。

回话方式:tpsend()/tprecv() 基于事件,分通告和代理

void (**p)(): 定义了一个指向函数指针的指针p

tpsetunsol(p) : 将p指向的函数func设置为客户机的事件处理器。

tpchkunsol(): 检查意外事件

事件代理: tppost()/tpsubscribe() 消息发布/订阅

Tuxedo提供了两个事件代理器(TMUSREVT TMSYSEVT)来处理订阅请求。

队列存储: tpenqueue() / tpdequeue()

Tuxedo/Q用到了Tuxedo提供的两个服务器:消息队列服务器(TMQUEUE)和消息转发服务器(TMQFORWARD)

---------------------------

多系统多机之间通信需要每台机器上都有一个Bridge进程,通过TCP/IP通信,Bridge进程维持一个长连接,一旦建立不会断掉。

TUXEDO应用系统的客户端访问TUXEDO服务器上的服务的过程图:

说明:

WS(Workstation Extension Product)用于指TUXEDO产品的客户端部分

WSC Workstation Client

WSL(Workstation Listener) TUXEDO系统自带的一个SERVER,它侦听一个指定的端口,WSC最初与该SERVER建立连接

WSH(Workstation Handler)TUXEDO系统自带的一个SERVER,由它处理WSC与TUXEDO SERVER之间的通讯。

Bulletin Board(公告板)TUXEDO把系统的配置保存在一个共享内存中,该共享内存称为公告板(BB)

BBL TUXEDO的管理进程,主要对公告板等进行管理

Workstation Client与TUXEDO SERVER建立连接的过程为:

1.WSC 调用tpinit()或tpchkauth()

2.WSC采用在WSNADDR中指定的IP地址与服务端的WSL建立连接

3.WSL为该WSC指定一个WSH,并把该WSH的侦听端口返回给WSC

4.WSC采用返回的端口与指定的WSH建立连接,并与WSL断开连接,这之后WSC与TUXEDO SERVER之间的通讯通过WSH进行处理,与WSL无关。

5.tpinit()或tpchkauth()调用返回。

----------------------------------------------------------

单域模式Single-Domain Model。单机模式 Single Host Model, 多机模式Multi-Processor Model

多域模式Multi-Domain Model


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/248983.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-13
下一篇2023-04-13

发表评论

登录后才能评论

评论列表(0条)

    保存