Socket编程实现
🔌 TCP协议选择原因
- 可靠性: 聊天消息不能丢失
- 顺序性: 消息需要按发送顺序到达
- 连接性: 需要维持长连接状态
# 服务器Socket初始化
self.server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
self.server_socket.bind((self.host, self.port))
self.server_socket.listen(100) # 支持100个并发连接
并发处理机制
🧵 多线程架构设计
# 为每个客户端创建独立处理线程
while self.running:
client_socket, client_address = self.server_socket.accept()
client_thread = threading.Thread(
target=self.handle_client,
args=(client_socket, client_address),
daemon=True
)
client_thread.start()
- 并发处理: 每个客户端独立线程,互不影响
- 资源隔离: 单个客户端异常不影响其他用户
- 可扩展性: 支持动态增加客户端连接
网络协议设计
📡 JSON消息协议
{
"type": "chat_message",
"data": {
"user_id": 1,
"chat_group_id": 1,
"content": "Hello World",
"timestamp": 1640995200.0
}
}
- 自描述性: JSON格式易于调试和扩展
- 类型安全: 20+种消息类型,严格类型检查
- 边界处理: 换行符分隔解决TCP粘包问题