Golang实现的分布式WebSocket微服务

Golang实现的分布式WebSocket微服务 1,项目简介 本系统基于Golang,ETCD,RPC实现分布式WebSocket微服务,也可以单机部署

本文包含相关资料包-----> 点击直达获取<-------

Golang实现的分布式WebSocket微服务

1.项目简介

本系统基于Golang、ETCD、RPC实现分布式WebSocket微服务,也可以单机部署,单机部署不需要ETCD、RPC。分布式部署可以支持nginx负责均衡、水平扩容部署,程序之间使用RPC通信。

基本流程为:用ws协议连接本服务,得到一个clientId,由客户端上报这个clinetId给服务端,服务端拿到这个clientId之后,可以给这个客户端发送信息,绑定这个客户端都分组,给分组发送消息。

目前实现的功能有,给指定客户端发送消息、绑定客户端到分组、给分组里的客户端批量发送消息、获取在线的客户端、上下线自动通知。适用于长连接的大部分场景,分组可以理解为聊天室,绑定客户端到分组相当于把客户端添加到聊天室,给分组发送信息相当于给聊天室的每个人发送消息。

2.文档

  1. 技术方案架构
  2. 接口文档

3.SDK

  1. PHP版:https://github.com/woodylan/go-websocket-php-sdk

4.使用

下载本项目:

这里已经打包好了,下载相应的环境,支持Linux、Windows、MacOS环境。

https://github.com/woodylan/go-websocket/releases

你也可以选择自己编译:

shell git clone https://github.com/woodylan/go-websocket.git

编译:

```shell // 编译适用于本机的版本 go build

// 编译Linux版本 CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build

// 编译Windows 64位版本 CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build

// 编译MacOS版本 CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build ```

执行:

编译成功之后会得到一个二进制文件 go-websocket ,执行该二进制文件。

shell ./go-websocket -c ./conf/app.ini

连接测试:

打开支持Websocket的客户端,输入 ws://127.0.0.1:6000/ws 进行连接,连接成功会返回 clientId

5.docker体验

5.1体验单机

  1. 构建镜像

shell docker build -t go-websocket .

  1. 基于镜像运行容器

shell docker run -tid -p 6000:6000 go-websocket

5.2体验集群,同时运行ETCD集群

在当前目录下,直接运行 docker-compose up 即可体验。

6.配置

配置文件:

配置文件位于项目根目录的 conf/app.ini

```ini [common] HttpPort = 6000 RPCPort = 7000

是否集群,单机则设为false

Cluster = true

对称加密key

CryptoKey = Adba723b7fe06819

[etcd] Endpoints = 127.0.0.1:2379, 127.0.0.2:2379, 127.0.0.3:2379 ```

运行项目:

在不同的机器运行本项目,注意配置号端口号,项目如果在同一机器,则必须用不同的端口。你可以用 supervisor 做进程管理。

配置Nginx负载均衡:

```nginx upstream ws_cluster { server 127.0.0.1:666; server 127.0.0.1:667; }

server { listen 660; server_name ws.example.com;

access_log /logs/access.log;
error_log /logs/error.log;

location /ws {
    proxy_pass http://ws_cluster; # 代理转发地址
    proxy_http_version 1.1;

    proxy_read_timeout 60s; # 超时设置

    # 启用支持websocket连接
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

location /api {
    proxy_set_header X-Forwarded-For $remote_addr;
    proxy_set_header Host            $http_host;

    proxy_pass http://ws_cluster; # 代理转发地址
}

} ```

至此,项目部署完成。

7.实现的功能

  • [x] 分布式
  • [x] 账户授权模式
  • [x] 不同业务系统隔离
  • [x] 发送给指定客户端
  • [x] 发送给指定分组
  • [x] 上下线通知
  • [x] 群广播
  • [x] 错误日志
  • [x] 参数校验
  • [x] 关闭某个连接
  • [x] 支持docker
  • [ ] 查询某个客户端是否在线

参考文献

  • 基于SpringCloud微服务治理平台的设计与实现(北京邮电大学·祁晖)
  • 服务网格框架的设计与实现(华中科技大学·陈立)
  • 云平台下基于微服务架构的高并发web服务器的设计与实现(电子科技大学·李潼)
  • 基于SSH架构的个人空间交友网站的设计与实现(北京邮电大学·隋昕航)
  • 基于.NET框架的企业应用集成研究和实现(浙江大学·蒋元星)
  • 云平台下基于微服务架构的高并发web服务器的设计与实现(电子科技大学·李潼)
  • 基于Golang的在线教育平台设计与实现(武汉工程大学·徐智勇)
  • 基于REST架构的Web Services的研究与设计(武汉理工大学·程小飞)
  • 基于微服务架构的宽带缴费服务系统的设计与实现(北京交通大学·李新)
  • 基于ZooKeeper的分布式服务中间件设计与实现(深圳大学·庄鹏)
  • 基于SSH架构的个人空间交友网站的设计与实现(北京邮电大学·隋昕航)
  • 基于微服务架构的高性能服务调用系统的设计与实现(电子科技大学·徐浩杰)
  • API服务中间件的设计与实现(电子科技大学·黄伟)
  • 分布式环境中任务下发系统的设计与实现(南京大学·蔡慧)
  • 基于微服务架构的宽带缴费服务系统的设计与实现(北京交通大学·李新)

本文内容包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主题。发布者:毕业设计工坊 ,原文地址:https://bishedaima.com/yuanma/35614.html

相关推荐

  • 基于SpringBoot框架的校园资料分享平台

    这是一份采用🔥🔥SpringBoot框架构建的校园资源分享系统源代码🔥🔥,主要编程语言为Java,并结合了SpringBoot和Vue技术,开发工具包括Idea或Eclipse
    2024年05月23日
    6 1 2
  • 基于Java+SSH的企业人事管理系统

    这是一个🔥🔥基于SSH的企业人事管理系统🔥🔥的项目源码,开发语言Java,开发环境Idea/Eclipse,这个 企业人事管理系统开发技术栈为SSH项目,可以作为毕业设计课程设计作业基于Spring
    2024年05月23日
    7 1 2
  • 基于WEB的疫情期间社区出入管理系统

    基于 Web 的疫情期间社区出入管理系统的设计与实现 摘要: 随着互联网的发展,“线上化”已经成为常态,如何方便快捷的为用户提供服务的问题越来越突出
    2024年05月14日
    2 1 1
  • javaweb垃圾分类查询系统、ssm+mysql

    垃圾分类在当今社会日益受到重视,是一项关乎环境保护和可持续发展的重要工作,然而,传统的垃圾分类方式效率低下,难以满足人们对环境保护的需求,针对这一问题,本文基于SSM框架提出了一种javaweb垃圾分类查询系统
    2024年05月07日
    15 1 3
  • C++模拟爱奇艺web视频上传

    c++模拟爱奇艺web视频上传 说明 此次学习的是HTTP的post协议,使用使用multipart form-data上传文件, 理解HTTP消息头 (五)——使用multipart/form-data上传文件 写的比较好的一篇帖子 https://www
    2024年05月14日
    2 1 2
  • 基于Python实现随机车牌号程序

    1, 课程设计目的 《软件设计基础-Python》课程设计是这门课程的实践性教学环节之一,本次设计结合实际应用的要求,使课程设计既覆盖Python的知识点,又接近工程实际需要
    2024年05月14日
    3 1 1
  • 网站爬虫之Python

    自然语言处理期中大作业 实验报告 数据爬取 本次实验需要自己从新闻网站的科技版爬取 1000 条新闻的正文内容,我这里选择了腾讯新闻科技板块的数据 https://new
    2024年05月14日
    2 1 2
  • 基于python的安全即时通讯系统

    Uchat——基于 python 的安全即时通讯系统 目的 设计完成简易的安全即时通讯系统,实现类似于 QQ 的聊天软件; 需求分析 功能需求 聊天客户端 注册:用户与集中服务器通信完成注册
    2024年05月14日
    21 1 2
  • 基于SpringBoot和MySQL的图书管理系统

    基于SpringBoot和MySQL的图书管理系统 1,前言 该图书管理系统是基于SpringBoot的项目,希望能够和小伙伴们一起学习,得到宝贵的意见
    2024年05月14日
    3 1 2
  • 基于SpringBoot框架的人力资源管理系统

    这是一套采用Java语言编写的🔥🔥SpringBoot人力资源管理系统源代码🔥🔥,它结合了SpringBoot和Vue框架进行开发,适用于Idea或Eclipse IDE的工作环境
    2024年05月23日
    6 1 3

发表回复

登录后才能评论