openimsdk / oimws

A websocket and tcp framework for openim
MIT License
17 stars 14 forks source link

OIMWS - OpenIM WebSocket Service 😎

Build Status Codecov Go Report Card GoDoc

:notes: OIMWS (OpenIM WebSocket Service) is a high-performance, scalable WebSocket framework designed specifically for building instant messaging (IM) systems. Harnessing the concurrent capabilities of Go and the real-time communication provided by WebSocket protocol, OIMWS offers a robust backend solution to support modern instant communication needs, ranging from basic message transit to complex session management and network optimization.

Features πŸš€

Quick Start πŸš—πŸ’¨

Clone the repository to your local machine:

git clone https://github.com/openim-sigs/oimws.git
cd oimws

Build oimws

mage

Start oimws

mage start

Check oimws status

mage check

Stop oimws Status:

mage stop

main

An encapsulated framework within jssdk connecting to openim-sdk-core, providing streamlined management and integration of WebSocket, TCP, and HTTP protocols in the OpenIM ecosystem.

code

the folders of oimws:

cmd-------------- the main.go folder

common----------- common structures and functions, primarily used by the network frame

core_func-------- Some functions encapsulate the interface for calling the JS SDK.

gate------------- network frame,functions for websocket

module----------- the module codes

network---------- network frame

Cluster solution(Consistent Hashing)

Using consistent hashing in Nginx typically involves the hash directive within the upstream module. Starting from Nginx 1.7.2, it supports consistent hashing based on specified variables. You can use the request parameter sendId as the key for consistent hashing to distribute requests.

Here's a configuration example that demonstrates how to use consistent hashing for the /ws endpoint to select backend servers:

http {
    upstream backend {
        # Use userId as the key for consistent hashing
        hash $arg_sendId consistent;

        # Define backend servers
        server backend1.example.com;
        server backend2.example.com;
        # ... More backend servers ...
    }

    server {
        listen 80;

        location /ws {
            proxy_pass http://backend;
            # ... Other possible proxy settings ...
        }

        # ... Other location definitions ...
    }
}

Contribution Ⓜ️

Feel free to contribute to this project by opening issues or submitting pull requests.

License 🀝

This project is licensed under the MIT License - see the LICENSE file for details.