: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.
golangci-lint
to ensure consistency in code quality and style.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
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.
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
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 ...
}
}
Feel free to contribute to this project by opening issues or submitting pull requests.
This project is licensed under the MIT License - see the LICENSE file for details.