Giter VIP home page Giter VIP logo

go-chat's Introduction

Lumen-IM 服务端(golang)

项目简介

Lumen IM 是一个网页版即时聊天系统,界面简约、美观、操作简单且容易进行二次开发。

使用技术
  • Golang 1.21+
  • MySQL 5.7+
  • Redis 5.0+
  • Minio
  • Nsq
功能介绍
  • 支持 WebSocket 通信
  • 支持私聊及群聊以及房间聊天场景
  • 支持服务水平扩展
  • 支持聊天消息类型有 文本、代码块、图片及其它类型文件
  • 支持聊天消息撤回、删除或批量删除、转发消息(逐条转发、合并转发)及群投票功能
  • 支持编写个人笔记、支持笔记分享(好友或群)

查看前端代码

项目预览

项目安装

  1. 下载源码
$ git clone https://github.com/gzydong/go-chat.git
  1. 拷贝项目根目录下 config.example.yaml 文件为 config.yaml 并正确配置相关参数
$ cp config.example.yaml config.yaml # 请务必正确配置相关参数
  1. 安装依赖包
$ go mod tidy
  1. 安装相关依赖命令行工具
$ make install
  1. 初始化数据库
$ go run ./cmd/lumenim migrate
  1. 开发环境下启动服务
# 打开两个终端,分别运行下面两个命令

$ go run ./cmd/lumenim http      # 本地启动 http 服务
$ go run ./cmd/lumenim commet    # 本地启动 websocket 服务
  1. 编译后运行
$ make build                   # 执行编译命令

# 执行后可在 ./bin 目录下看到 lumenim

go-chat's People

Contributors

aohanhongzhi avatar gzydong avatar mylovegy avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

go-chat's Issues

bug:目前定位到redis会超时,不知道具体原因是啥,有待进一步分析。

image
func (s *ContactApplyService) GetApplyUnreadNum(ctx context.Context, uid int) int {

	sprintf := fmt.Sprintf("im:contact:apply:%d", uid)

	// https://www.cnblogs.com/bigdataZJ/p/golang-timeout.html
	done := make(chan int)
	go func(ctx context.Context, redisKey string) {
		// 获取redis信息
		num, err := s.Redis().Get(ctx, redisKey).Int()
		if err != nil {
			if err == redis.Nil {
				log.Infof("redis查询为空 key[%v] %+v", redisKey, err)
			} else {
				log.Errorf("redis 查询错误 %+v", err)
			}
		}
		done <- num
	}(ctx, sprintf)

	select {
	case num := <-done:
		return num
	case <-time.After(time.Duration(1500 * time.Millisecond)):
		log.Errorf("获取未读数量超时 redis timeout!!! %v", sprintf)
		return 0
	}
	return 0
}

本地部署后上传本地图片404

filesystem配置如下:
`

文件系统配置【oss,qiniu 暂不支持】

filesystem:
default: local
local:
# 文件保存的根目录
# root: "/path/xx/lumenim/"
root: "/Users/data/lumenim/"
# 公开的 bucket
bucket_public: "public"
# 私有的 bucket
bucket_private: "private"

endpoint: "im-cdn.gzydong.com"

endpoint: "127.0.0.1:9503"
ssl: false

在前台上传图片后地址默认为http://127.0.0.1:9503/public/media/image/202408/8569ea9b-5d7d-4cbd-8133-e03de0c4bc11_1440x810.webp` ,并且404 ,请问这个怎么解决呢?

migrate sonic 报错问题.

F:\code\IM\go-chat-master>go run ./cmd/lumenim migrate

github.com/bytedance/sonic/internal/rt

C:\Users\Quarter\go\pkg\mod\github.com\bytedance\[email protected]\internal\rt\gcwb.go:102:6: missing function body
C:\Users\Quarter\go\pkg\mod\github.com\bytedance\[email protected]\internal\rt\gcwb.go:104:6: missing function body
C:\Users\Quarter\go\pkg\mod\github.com\bytedance\[email protected]\internal\rt\gcwb.go:114:6: missing function body

打包成 Docker镜像后如何运行 HTTP服务 和 Websocket、TCP 服务

FROM golang:1.21.5-alpine

WORKDIR /go/src/go_chat
COPY . .

为我们的镜像设置必要的环境变量

ENV GO111MODULE=on
CGO_ENABLED=0
GOOS=linux
GOARCH=amd64
GOPROXY="https://goproxy.cn,direct"
RUN echo http://mirrors.aliyun.com/alpine/v3.10/community/ > /etc/apk/repositories
&& echo http://mirrors.aliyun.com/alpine/v3.10/main/ >> /etc/apk/repositories
&& apk add tzdata
&& ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
&& echo 'Asia/Shanghai' >/etc/timezone
RUN go build -o go_chat .

CMD ["./go_chat"]

构造镜像后 运行 docker run -d -v /root/chat/go-chat:/app -p 9503:9503 --name go_chat_http-1 --restart=always go_chat http 无效 末尾的 http是要启动的服务类别

bug:后端与前端不匹配,都是2.0版本

前端

export const ServeContactGroupSave = data => {
  return post('/api/v1/contact/group/save', data)
}

go后端

contact.POST("/group/create", ichat.HandlerFunc(handler.V1.ContactGroup.Create)) // 联系人分组添加

一个save,一个create。参数一个是1个元素,后端是list

项目配置不全以及缺少文件

1、项目配置中缺少 Http和websocket端口配置,导致启动报错
2、执行 go run ./internal/websocket 这个命令项目中缺少 websocket文件
请问作者能补上补

请教问题

增加了一个api/proto/web/v1/ro.proto,代码如下:

syntax = "proto3";

package web;

option go_package = "web/v1;web";

import "tagger/tagger.proto";

message ArticleEditRequest{
  int32 article_id = 1;
  int32 class_id = 2;
  string title = 3 [(tagger.tags) = "binding:\"required\""];
  string content = 4 [(tagger.tags) = "binding:\"required\""];
  string md_content = 5 [(tagger.tags) = "binding:\"required\""];
}

message ArticleEditResponse{
  int32 id = 1;
  string title = 2;
  string abstract = 3;
  string image = 4;
}

在项目目录执行:protoc --proto_path=. --go_out=api/pb api/proto/web/v1/ro.proto
报错:

tagger/tagger.proto: File not found.
api/proto/web/v1/ro.proto:7:1: Import "tagger/tagger.proto" was not found or had errors.

请问该如何执行protoc命令生成对应文件呢?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.