服务类型选择
后端服务类型选择
本文详细介绍 GMSSH 应用后端服务的两种通信类型,帮助开发者根据应用需求选择合适的服务架构。
服务类型概述
GMSSH 平台支持两种后端服务通信类型:
类型 | 特点 | 适用场景 | 性能 |
---|---|---|---|
Socket | Unix Domain Socket 通信 | 高性能应用、频繁通信 | 高 |
HTTP | 标准 HTTP 协议 | 标准 Web 应用、第三方集成 | 中 |
推荐选择
我们推荐使用 Socket 类型,因为 GMSSH SDK 基于 Socket 实现,提供更好的性能和开发体验。
Socket 服务类型
特点与优势
- 高性能:基于 Unix Domain Socket,进程间通信效率更高
- 低延迟:本地文件套接字通信,无网络开销
- SDK 支持:官方 SDK 完全基于 Socket 实现
- 安全性:本地通信,避免网络安全风险
配置要求
在应用部署时,Socket 服务必须在以下位置创建套接字文件:
/.__gmssh/plugin/{组织名}/{应用名}/tmp/app.sock
实现示例
使用 Python SDK 创建 Socket 服务:
# main.py
import asyncio
from simplejrpc.app import ServerApplication
from simplejrpc.response import jsonify
# 创建应用实例,指定 socket 文件路径
app = ServerApplication("app.socket")
@app.route(name="ping")
async def ping():
"""健康检查"""
return jsonify(code=200, data="pong", msg="OK")
@app.route(name="hello")
async def hello():
"""简单的问候接口"""
return jsonify(code=200, data="Hello, GMSSH!", msg="请求成功")
if __name__ == "__main__":
asyncio.run(app.run())
SDK 文档
详细的 Socket 服务开发指南请参考 Python SDK 文档。
HTTP 服务类型
特点与优势
- 标准协议:使用标准 HTTP 协议,兼容性好
- 易于调试:可使用标准 HTTP 工具进行测试
- 第三方集成:便于与现有 HTTP 服务集成
- 跨平台:不依赖特定操作系统特性
配置要求
HTTP 服务需要在启动时将端口号写入指定文件:
/.__gmssh/plugin/{组织名}/{应用名}/tmp/app.port
端口管理
端口要求
- 必须使用随机端口避免冲突
- 启动前需要检查端口可用性
- 将端口号写入 app.port 文件
实现示例
使用 Flask 创建 HTTP 服务:
import socket
import os
from flask import Flask, jsonify
app = Flask(__name__)
def get_free_port():
"""获取可用的随机端口"""
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.bind(('', 0))
s.listen(1)
port = s.getsockname()[1]
return port
def write_port_file(port):
"""将端口号写入文件"""
# todo:在实际应用中,需要根据组织名和应用名动态生成路径
port_file = '/.__gmssh/plugin/{组织名}/{应用名}/tmp/app.port'
os.makedirs(os.path.dirname(port_file), exist_ok=True)
with open(port_file, 'w') as f:
f.write(str(port))
@app.post("/hello")
def hello():
return jsonify(code=200, data="hello world!", msg="OK")
@app.get("/ping")
def ping():
return jsonify(code=200, data="pong", msg="OK")
if __name__ == '__main__':
port = get_free_port()
write_port_file(port)
app.run(host='127.0.0.1', port=port)
选择建议
推荐使用 Socket
适用于以下场景:
- 新开发的 GMSSH 应用
- 需要高性能通信的应用
- 使用官方 SDK 开发的应用
- 对延迟敏感的实时应用
考虑使用 HTTP
适用于以下场景:
- 需要与现有 HTTP 服务集成
- 使用第三方框架开发
- 需要标准 REST API 的应用
- 跨平台兼容性要求高的应用
开发建议
- 优先选择 Socket:除非有特殊需求,建议使用 Socket 类型
- 使用官方 SDK:可以大大简化开发流程
- 遵循路径规范:严格按照要求创建套接字文件或端口文件
- 做好错误处理:确保服务启动失败时有适当的错误提示