
1. OpenIM服务器Docker部署全流程第一次接触OpenIM时我也被这个开源的即时通讯解决方案惊艳到了。它不仅支持基础的文字聊天还能轻松实现音视频通话功能最关键的是部署过程比想象中简单很多。下面我就把踩过坑后总结的最优部署方案分享给大家。1.1 服务器环境准备建议选择Ubuntu 20.04 LTS系统2核4G是最低配置。我实测过1核2G的机器跑起来特别吃力音视频通话时经常卡顿。如果你用的是阿里云、腾讯云这些主流云服务商记得在控制台安全组里放行这些端口10001-10010IM核心服务20000-20010音视频媒体服务8080管理后台安装Docker和Docker Compose时有个小技巧用国内镜像源能快不少# 安装Docker阿里云镜像 curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun # Ubuntu安装Docker Compose插件 apt-get update apt-get install docker-compose-plugin1.2 配置文件关键修改克隆仓库后重点要改config.yaml里的这几个参数# 修改成你的服务器公网IP ip: 你的公网IP地址 api_port: 10002 # 保持默认即可 ws_port: 10001 # WebSocket端口遇到过最坑的问题是管理后台登录无响应后来发现是openim-api服务没启动。解决办法是下载openim-docker仓库的文件覆盖原配置git clone https://github.com/openimsdk/openim-docker.git cp openim-docker/docker-compose.yaml Open-IM-Server/ cp openim-docker/.env Open-IM-Server/1.3 服务启动与验证启动命令很简单但建议先不加-d参数方便看日志排错docker-compose up # 确认无误后再用后台模式 docker-compose up -d验证服务是否正常我一般用三个方法访问http://IP:11002能打开管理后台执行docker-compose ps查看所有容器状态用Postman测试API接口连通性2. 安卓端SDK集成实战去年做过一个社交APP就是用OpenIM实现的通讯功能。集成过程比想象中顺利但有几个细节要特别注意。2.1 项目配置要点在build.gradle里添加依赖时建议用阿里云镜像加速allprojects { repositories { maven { url https://maven.aliyun.com/repository/public } maven { url https://jitpack.io } } } dependencies { implementation io.openim:core-sdk:2.3.0 implementation io.openim:av-sdk:2.3.0 // 音视频必加 }2.2 SDK初始化技巧Application里初始化时建议加上重连机制。实测发现网络切换时自动重连特别重要OpenIMClient.getInstance().init(this, http://your_server_ip:10002, ws://your_server_ip:10001, new OnConnectListener() { Override public void onConnectFailed(int code, String error) { // 这里建议实现指数退避重连 handler.postDelayed(this::retryConnect, 5000); } });3. 音视频通话开发详解做过三个用到OpenIM音视频的项目总结出一套最佳实践。3.1 通话流程实现发起通话时要处理好生命周期这个代码模板可以直接用// 发起视频通话 String callID UUID.randomUUID().toString(); OpenIMClient.getInstance().callManager.startCall( targetUserID, CallType.VIDEO, new OnBaseListenerString() { Override public void onError(int code, String error) { runOnUiThread(() - toast(呼叫失败: error)); } }); // 监听来电 OpenIMClient.getInstance().callManager.setCallListener( new OnCallListener() { Override public void onCallReceived(String callID, String callerID, int type) { showCallDialog(callID, callerID, type); } });3.2 自定义UI开发视频渲染要用SurfaceViewTextureView在部分机型上会有兼容问题。布局文件可以这样写RelativeLayout SurfaceView android:idid/remote_view android:layout_widthmatch_parent android:layout_heightmatch_parent/ SurfaceView android:idid/local_view android:layout_width120dp android:layout_height160dp android:layout_alignParentEndtrue android:layout_alignParentBottomtrue/ /RelativeLayout4. 踩坑经验与性能优化部署过十几套OpenIM环境总结出这些常见问题的解决办法。4.1 音视频卡顿排查遇到音视频卡顿按这个顺序检查用ping和telnet测试服务器端口连通性通过管理后台查看服务状态检查客户端网络环境特别是4G/5G切换时调整视频分辨率参数4.2 安卓端常见问题消息发送失败大多是这两个原因token过期 - 调用refreshToken接口网络策略问题 - 在AndroidManifest里加application android:usesCleartextTraffictrue /application音视频通话有个隐藏坑点部分华为机型会杀后台进程。解决办法是加前台Service并申请电池优化白名单。