以下代码使用multiprocessing.connection的Listener与Client对象,模拟客服机器人聊天。请将服务端代码改为多线程技术,实现机器人客服能够与多个客户端进程聊天。
server.py
from multiprocessing.connection import Listener
host = ('127.0.0.1', 65539)
try:
# 启动服务器
ls = Listener(host, authkey=b'dongfang')
print('服务器启动成功')
# 开始监听客户端连接
while True:
conn = ls.accept()
# 输出连接客户端信息
print('客户端信息:', ls.last_accepted)
while True:
# 接收客户端发送的数据
data = conn.recv()
print(f'客户端:{data}')
if data == 'nihao':
conn.send('欢迎登录')
elif data == 'bye':
conn.close()
break
else:
conn.send('听不懂啊,再说一次')
print(f'客户端{ls.last_accepted}已退出')
except:
print('服务器启动失败')
client.py
from multiprocessing.connection import Client
server_host = ('127.0.0.1', 1)
try:
# 连接服务器
print('连接服务器')
c = Client(server_host, authkey=b'dongfang')
print('服务器连接成功')
while True:
mess = input('请输入聊天信息:')
c.send(mess)
try:
# 等待接收数据
data = c.recv()
print(f'服务器:{data}')
except:
break
c.close()
except:
print('服务器异常,连接失败')
程序中的端口号应该小于65536,65539是无效的端口号。
以下为多线程版本,每当有新的客户端连接时,都会创建一个新的线程来处理该客户端请求。这样就可以同时处理多个客户端的请求了。
from multiprocessing.connection import Listener
import threading
# 服务器地址端口
host = ('127.0.0.1', 65535)
# 处理客户端请求的函数
def handle_client(conn, client_address):
# 输出连接客户端信息
print('客户端信息:', client_address)
while True:
# 接收客户端发送的数据
data = conn.recv()
print(f'客户端:{data}')
if data == 'hello':
conn.send('欢迎登录')
elif data == 'bye':
conn.close()
break
else:
conn.send('听不懂啊,再说一次')
print(f'客户端{client_address}已退出')
try:
# 启动服务器
ls = Listener(host, authkey=b'dongfang')
print('服务器启动成功')
# 开始监听客户端连接
while True:
conn = ls.accept()
# 创建新线程处理客户端请求
t = threading.Thread(target=handle_client, args=(conn, ls.last_accepted))
t.start()
except Exception as e:
print('服务器启动失败:', e)