-
Notifications
You must be signed in to change notification settings - Fork 8
Expand file tree
/
Copy pathquick_start.py
More file actions
207 lines (167 loc) · 6.72 KB
/
Copy pathquick_start.py
File metadata and controls
207 lines (167 loc) · 6.72 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
"""
API-Server Version 快速开始示例
演示最基本的服务端和客户端设置
前提条件:
pip install -e .
"""
import asyncio
import logging
# ✅ API-Server Version 正确导入方式
from maim_message.server import create_server_config, create_ssl_server_config, WebSocketServer
from maim_message.client import create_client_config, create_ssl_client_config, WebSocketClient
from maim_message.message import APIMessageBase, BaseMessageInfo, Seg, MessageDim
# 配置日志
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
async def quick_server_example():
"""快速服务器示例"""
print("🚀 启动快速服务器示例...")
# 创建服务器配置
config = create_server_config(host="localhost", port=18060, path="/ws")
# 设置消息处理器
config.on_message = lambda msg, meta: logger.info(f"收到消息: {msg.message_segment.data}")
# 创建并启动服务器
server = WebSocketServer(config)
await server.start()
print("✅ 服务器已启动在 ws://localhost:18060/ws")
print("⏳ 运行30秒后自动停止...")
# 运行30秒
await asyncio.sleep(30)
await server.stop()
print("✅ 服务器已停止")
async def quick_client_example():
"""快速客户端示例"""
print("🔗 启动快速客户端示例...")
# 创建客户端配置
config = create_client_config(
url="ws://localhost:18060/ws",
api_key="quick_demo_key",
platform="demo"
)
# 设置消息处理器
config.on_message = lambda msg, meta: logger.info(f"客户端收到: {msg.message_segment.data}")
# 创建并启动客户端
client = WebSocketClient(config)
await client.start()
# 连接服务器
connected = await client.connect()
if not connected:
print("❌ 连接失败")
return
print("✅ 客户端连接成功")
# 发送测试消息
messages = [
"Hello from quick client!",
"This is a test message",
"API-Server Version is working!",
"🎉 WebSocket连接正常"
]
for i, content in enumerate(messages, 1):
message = APIMessageBase(
message_info=BaseMessageInfo(
platform="demo",
message_id=f"quick_{i}_{int(asyncio.get_event_loop().time() * 1000)}",
time=asyncio.get_event_loop().time()
),
message_segment=Seg(type="text", data=content),
message_dim=MessageDim(api_key="quick_demo_key", platform="demo")
)
success = await client.send_message(message)
print(f"📤 消息{i}发送{'成功' if success else '失败'}: {content}")
await asyncio.sleep(1)
# 断开连接
await client.disconnect()
await client.stop()
print("✅ 客户端已停止")
async def import_demo():
"""导入方式演示"""
print("📦 导入方式演示:")
print("-" * 40)
try:
# ✅ 正确的导入方式
print("✅ 正确的导入方式:")
print(" from maim_message.server import create_server_config, WebSocketServer")
print(" from maim_message.client import create_client_config, WebSocketClient")
print(" from maim_message.message import APIMessageBase")
# 验证导入
from maim_message.message import APIMessageBase as TestMsg
from maim_message.server import WebSocketServer as TestServer
from maim_message.client import WebSocketClient as TestClient
print(f" - APIMessageBase: {TestMsg}")
print(f" - WebSocketServer: {TestServer}")
print(f" - WebSocketClient: {TestClient}")
except ImportError as e:
print(f"❌ 导入失败: {e}")
return
try:
# ❌ 错误的导入方式
print("\n❌ 错误的导入方式(会失败):")
print(" from maim_message import APIMessageBase")
from maim_message import APIMessageBase
print(" ❌ 这不应该成功!")
except ImportError:
print(" ✅ 正确:无法从根模块导入API-Server Version组件")
print("\n📝 总结:")
print(" - Legacy组件: from maim_message import MessageBase, Seg 等")
print(" - API-Server Version: 从子模块导入 (message, server, client)")
async def main():
"""主函数"""
print("🎯 API-Server Version 快速开始示例")
print("=" * 50)
# 1. 导入演示
await import_demo()
# 2. 服务器示例(在后台运行)
print("\n" + "=" * 50)
print("📋 注意: 下面的示例演示服务器和客户端")
print(" 在实际使用中,服务器和客户端应该在不同的进程中运行")
print("=" * 50)
# 3. 演示基本用法
print("\n📚 基本用法示例:")
print("```python")
print("# HTTP服务器")
print("from maim_message.server import create_server_config, WebSocketServer")
print("config = create_server_config(host='localhost', port=18060)")
print("server = WebSocketServer(config)")
print("await server.start()")
print("")
print("# HTTPS/SSL服务器")
print("from maim_message.server import create_ssl_server_config, WebSocketServer")
print("config = create_ssl_server_config(")
print(" host='localhost',")
print(" port=18044,")
print(" ssl_certfile='/path/to/server.crt',")
print(" ssl_keyfile='/path/to/server.key'")
print(")")
print("server = WebSocketServer(config)")
print("await server.start()")
print("")
print("# HTTP客户端")
print("from maim_message.client import create_client_config, WebSocketClient")
print("from maim_message.message import APIMessageBase")
print("config = create_client_config(url='ws://localhost:18060/ws', api_key='your_key')")
print("client = WebSocketClient(config)")
print("await client.connect()")
print("")
print("# HTTPS/SSL客户端")
print("from maim_message.client import create_ssl_client_config, WebSocketClient")
print("config = create_ssl_client_config(")
print(" url='wss://localhost:18044/ws',")
print(" api_key='your_key',")
print(" ssl_ca_certs='/path/to/ca.crt'")
print(")")
print("client = WebSocketClient(config)")
print("await client.connect()")
print("```")
print("\n🔒 SSL/HTTPS特性:")
print("✅ 完整的SSL/TLS支持")
print("✅ 自签名证书测试")
print("✅ 客户端证书验证")
print("✅ 双向认证支持")
print("✅ 灵活的SSL配置选项")
print("✅ 自动协议检测 (ws:// vs wss://)")
print("\n✅ 快速开始示例完成!")
print("\n📖 更多详细用法请参考:")
print(" - doc/api_server_usage_guide.md")
print(" - examples/external_library_example.py")
if __name__ == "__main__":
asyncio.run(main())