即时通讯IM
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
Go to file
Gordon 958afd6115
fix: start don't kill old process (#892)
1 year ago
.docker-compose_cfg feat: add license 1 year ago
.github feat: fix scripts and build speed (#790) 1 year ago
CHANGELOG feat: add test format (#657) 1 year ago
assets docs: add png multi-terminal-synchronization (#805) 1 year ago
build/docker feat: fix scripts and build speed (#790) 1 year ago
cmd new feature data convert (#819) 1 year ago
config Add feature 829 (#853) 1 year ago
deployments Update README.md (#795) 1 year ago
docs Feat/686: add release process (#891) 1 year ago
internal Feature: add api of get server time and the message's read status is incorrect when app reinstalling. (#884) 1 year ago
pkg Feature: add api of get server time and the message's read status is incorrect when app reinstalling. (#884) 1 year ago
scripts fix: start don't kill old process (#892) 1 year ago
test feat: add scripts format (#811) 1 year ago
tools sync designation conversation unreadcount (#874) 1 year ago
.dockerignore feat: add test file 1 year ago
.env fix: docker images (#701) 1 year ago
.gitignore feat: add scripts format (#811) 1 year ago
.golangci.yml fix: part of the make rules optimization (#751) 1 year ago
.goreleaser.yaml fix: part of the make rules optimization (#751) 1 year ago
CHANGELOG.md feat: add link file 1 year ago
CODE_OF_CONDUCT.md docs: update create CODE_OF_CONDUCT.md (#705) 1 year ago
CONTRIBUTING.md docs: fix lint update CONTRIBUTING.md (#632) 1 year ago
Dockerfile 815 (#849) 1 year ago
LICENSE v3 - main to cut out 2 years ago
Makefile feat: add openim log (#679) 1 year ago
README-zh_CN.md update readme: With the release of the new system, the readme is also updated accordingly. 1 year ago
README.md Update README.md (#807) 1 year ago
docker-compose.yaml 815 (#849) 1 year ago
go.mod Feature: add api of get server time and the message's read status is incorrect when app reinstalling. (#884) 1 year ago
go.sum Feature: add api of get server time and the message's read status is incorrect when app reinstalling. (#884) 1 year ago
go.work 815 (#849) 1 year ago
go.work.sum Feature: add api of get server time and the message's read status is incorrect when app reinstalling. (#884) 1 year ago
install.sh feat: add scripts format (#811) 1 year ago
install_guide.sh fix: part of the make rules optimization (#751) 1 year ago

README.md

Open source Instant Messaging Server

A+ good first

English 简体中文 Docs

About OpenIM

Open-IM-Server, crafted meticulously using pure Golang, stands as a robust instant messaging server. Its unique approach to communication, via JSON over WebSocket, treats every interaction as a message. This simplifies customization and eliminates the need for tinkering with server code. Harnessing the power of microservice architecture, the server can be deployed via clusters, promising impressive performance and scalability.

Open-IM-Server is more than an instant messaging server; it's a powerful tool for incorporating real-time networking into your applications, positioning itself as your premier choice for integration! 🚀

Please be aware that Open-IM-Server does not function as a standalone product and does not offer built-in account registration or login services. To ease your implementation process, we've open-sourced the chat repository, which comprises these features. Deploying this chat business server in conjunction with Open-IM-Server expedites the setup of a comprehensive chat product. 👥

Further enhancing your experience, we also provide an SDK client, wherein most complex logics are implemented. The SDK repository can be found at this link. The chat repository is our business server while the 'core' represents the high-level encapsulation of the SDK, synergistically working together to deliver superior results.

🌟 Why OpenIM

🔍 Function screenshot display

💻🔄📱 Multi Terminal Synchronization 🔄🖥️ 📅 Efficient Meetings 🚀💼
multiple-message efficient-meetings
📲🔄 One-to-one and Group Chats 👥🗣️ 🎁💻 Special Features - Custom Messages ✉️🎨
group-chat special-function
  1. Comprehensive Message Type Support 💬

    Supports almost all types of messages, including text, images, emojis, voice, video, geographical location, files, quotes, business cards, system notifications, custom messages and more

    Supports one-on-one and multi-person audio and video calls

    Provides terminal support for multiple platforms such as iOS, Android, Flutter, uni-app, ReactNative, Electron, Web, H5

  2. Efficient Meetings Anytime, Anywhere 🌎

    Based on IM (Instant Messaging) with 100% reliable forced signaling capabilities, it paves the way for IM systems, deeply integrated with chat applications

    Supports hundreds of people in a single meeting, with subscription numbers reaching thousands, and server-side audio and video recording

  3. One-on-one and Group Chats for Various Social Scenarios 👥

    OpenIM has four roles: application administrator, group owner, group administrator, and regular member

    Powerful group features such as muting, group announcements, group validation, unlimited group members, and loading group messages as needed

  4. Unique Features 🌟

    Supports read-and-burn private chats, customizable duration

    Message editing function broadens social scenarios, making instant communication more diverse and interesting

  5. Open Source 👐

    The code of OpenIM is open source, self-controlled data, aimed at building a globally leading IM open source community, including client SDK and server

    Based on open source Server, many excellent open source projects have been developed, such as OpenKF (Open source AI customer service system)

  6. Easy to Expand 🔧

    The OpenIM server is implemented in Golang, introducing an innovative "everything is a message" communication model, simplifying the implementation of custom messages and extended features

  7. High Performance 🏎️

    OpenIM supports a hierarchical governance architecture in the cluster, tested by a large number of users, and abstracts the storage model of online messages, offline messages, and historical messages

  8. Full Platform Support 📺

    Supports native iOS, Android; cross-platform Flutter, uni-app, ReactNative; major web front-end frameworks such as React, Vue; applets; and PC platforms supported by Electron

  9. The ultimate deployment experience 🤖

    Supports cluster deployment

    Supports multi-architecture mirroring, our Docker images are hosted not only on GitHub but also on Alibaba Cloud and Docker Hub supporting multiple architectures. Visit our GitHub packages and read our version management document for more information.

  10. A large ecosystem of open source communities 🤲

    We have tens of thousands of users and many solutions to problems.

    We have a large open source community called OpenIMSDK that runs the core modules, we have an open source community called openim-sigs to explore more IM-based infrastructure products.

🚀 Quick Start

Deploying with Docker Compose
  1. Clone the project
# choose what you need
BRANCH=release-v3.1
git clone -b $BRANCH https://github.com/OpenIMSDK/Open-IM-Server openim && export openim=$(pwd)/openim && cd $openim && make build

Note Read our release policy: https://github.com/OpenIMSDK/Open-IM-Server/blob/main/docs/conversions/version.md

  1. Modify .env
USER=root #no need to modify
PASSWORD=openIM123  #A combination of 8 or more numbers and letters, this password applies to redis, mysql, mongo, as well as accessSecret in config/config.yaml
ENDPOINT=http://127.0.0.1:10005 #minio's external service IP and port, or use the domain name storage.xx.xx, the app must be able to access this IP and port or domain,
API_URL=http://127.0.0.1:10002/object/ #the app must be able to access this IP and port or domain,
DATA_DIR=./  #designate large disk directory
  1. Deploy and start

Note This command can only be executed once. It will modify the component passwords in docker-compose based on the PASSWORD variable in .env, and modify the component passwords in config/config.yaml. If the password in .env changes, you need to first execute docker-compose down; rm components -rf and then execute this command.

make install
  1. Check the service
make check

https://github.com/OpenIMSDK/Open-IM-Server/blob/main/docs/images/docker_build.png

Compile from Source

Ur need Go 1.18 or higher version, and make.

Version Details: https://github.com/OpenIMSDK/Open-IM-Server/blob/main/docs/conversions/version.md

# choose what you need
BRANCH=release-v3.1
git clone -b $BRANCH https://github.com/OpenIMSDK/Open-IM-Server openim && export openim=$(pwd)/openim && cd $openim && make build

Read about the OpenIM Version Policy

make help to help you see the instructions supported by OpenIM.

All services have been successfully built as shown in the figure

Successful Compilation

Component Configuration Instructions

The config/config.yaml file has detailed configuration instructions for the storage components.

  • Zookeeper

    • Used for RPC service discovery and registration, cluster support.

      zookeeper:
        schema: openim                          #Not recommended to modify
        address: [ 127.0.0.1:2181 ]             #address
        username:                               #username
        password:                               #password
      
  • MySQL

    • Used for storing users, relationships, and groups, supports master-slave database.

      mysql:
        address: [ 127.0.0.1:13306 ]            #address
        username: root                          #username
        password: openIM123                     #password
        database: openIM_v2                     #Not recommended to modify
        maxOpenConn: 1000                       #maximum connection
        maxIdleConn: 100                        #maximum idle connection
        maxLifeTime: 60                         #maximum time a connection can be reused (seconds)
        logLevel: 4                             #log level 1=slient 2=error 3=warn 4=info
        slowThreshold: 500                      #slow statement threshold (milliseconds)
      
  • Mongo

    • Used for storing offline messages, supports mongo sharded clusters.

      mongo:
        uri:                                    #Use this value directly if not empty
        address: [ 127.0.0.1:37017 ]            #address
        database: openIM                        #default mongo db
        username: root                          #username
        password: openIM123                     #password
        maxPoolSize: 100                        #maximum connections
      
  • Redis

    • Used for storing message sequence numbers, latest messages, user tokens, and mysql cache, supports cluster deployment.

      redis:
        address: [ 127.0.0.1:16379 ]            #address
        username:                               #username
        password: openIM123                     #password
      
  • Kafka

    • Used for message queues, for message decoupling, supports cluster deployment.

      kafka:
        username:                               #username
        password:                               #password
        addr: [ 127.0.0.1:9092 ]                #address
        latestMsgToRedis:
          topic: "latestMsgToRedis"
        offlineMsgToMongo:
          topic: "offlineMsgToMongoMysql"
        msgToPush:
          topic: "msqToPush"
        msgToModify:
          topic: "msgToModify"
        consumerGroupID:
          msgToRedis: redis
          msgToMongo: mongo
          msgToMySql: mysql
          msgToPush: push
          msgToModify: modify
      
Start and Stop Services

Start services

./scripts/start_all.sh;

Check services

./scripts/check_all.sh

Stop services

./scripts/stop_all.sh
Open IM Ports
TCP Port Description Operation
TCP:10001 ws protocol, message port such as message sending, pushing etc, used for client SDK Port release or nginx reverse proxy, and firewall off
TCP:10002 api port, such as user, friend, group, message interfaces. Port release or nginx reverse proxy, and firewall off
TCP:10005 Required when choosing minio storage (openIM uses minio storage by default) Port release or nginx reverse proxy, and firewall off
Open Chat Ports
TCP Port Description Operation
TCP:10008 Business system, such as registration, login etc Port release or nginx reverse proxy, and firewall off
TCP:10009 Management backend, such as statistics, banning etc Port release or nginx reverse proxy, and firewall off

OpenIM isn't just an open-source instant messaging component, it's an integral part of your application ecosystem. Check out this diagram to understand how AppServer, AppClient, Open-IM-Server, and Open-IM-SDK interact.

App-OpenIM Relationship

🏗️ Overall Architecture

Delve into the heart of Open-IM-Server's functionality with our architecture diagram.

Overall Architecture

🛠️ To start developing OpenIM

OpenIM Our goal is to build a top-level open source community. We have a set of standards, in the Community repository.

If you'd like to contribute to this Open-IM-Server repository, please read our contributor documentation.

Before you start, please make sure your changes are in demand. The best for that is to create a new discussion OR Slack Communication, or if you find an issue, report it first.

👥 Community

📆 Community Meetings

We want anyone to get involved in our community and contributing code, we offer gifts and rewards, and we welcome you to join us every Thursday night.

Our conference is in the OpenIM Slack 🎯, then you can search the Open-IM-Server pipeline to join

We take notes of each biweekly meeting in GitHub discussions, Our historical meeting notes, as well as replays of the meetings are available at Google Docs 📑.

👀 Who are using OpenIM

Check out our user case studies page for a list of the project users. Don't hesitate to leave a 📝comment and share your use case.

📄 License

OpenIM is licensed under the Apache 2.0 license. See LICENSE for the full license text.

The OpenIM logo, including its variations and animated versions, displayed in this repository OpenIM under the assets/logo and assets/logo-gif directories, are protected by copyright laws.

🔮 Thanks to our contributors!