3.User - EVA-JianJun/ChatRoom-V3 GitHub Wiki
创建 User
from ChatRoom import User
user_foo = User(
user_name="Foo",
)
创建 User 会在当前文件夹新建 User 用户名的如 .Foo 文件夹.
User 参数文档
User 的配置会稍微复杂点,毕竟 User 需要告诉 Room 自身的一些信息,而这些信息需要开发者按需提供.
"""
文档:
创建一个聊天室用户
参数:
user_name : str
用户名
user_password : str (Default: "")
用户密码
room_ip : str (Default: "127.0.0.1")
需要连接的聊天室ip, 默认为本机ip
room_port : int (Default: 2428)
需要连接的聊天室端口
room_password : str (Default: "Passable")
需要连接的聊天室密码
local_ip : str (Default: "")
本机局域网ip,不填写系统自动获取,优先获取优先级高的网卡本地ip
public_ip : str (Default: "")
如果本机拥有公网ip填写public_ip后本机被标记为公网ip用户
除了内网互联其他用户连接本用户都将通过此公网ip进行连接
server_port : int (Default: ramdom)
本机消息服务对外端口, 默认为 0 系统自动分配
请注意需要在各种安全组或防火墙开启此端口
lan_id : str (Default: "Default")
默认为"Default", 局域网id, 由用户手动设置
同一局域网的用户请设定相同的局域网id, 这样同一内网下的用户将直接局域网互相连接
log : None or str (Default: "INFO")
日志等级
None: 除了错误什么都不显示
"INFO": 显示基本连接信息
"DEBUG": 显示所有信息
password_digits : int (Default: 16)
密码位数, 默认16位
encryption : bool (default True)
是否加密传输, 不加密效率较高
white_list : str (Default: [])
用户白名单 : 如果设置白名单,只有白名单内的用户可以连接
black_list : str (Default: [])
用户黑名单 : 如果设置黑名单,黑名单内的用户不可连接
safe_path_list : list (default [".user_name/DEFAULT_SAFE_PATH"])
安全文件夹, 文件操作只能在这个列表中的文件中操作
log_config_file : str (Default: ".user_name/LOG_CONFIG.py")
日志配置文件路径 : 配置当前user的日志id信息
group_list : list (Default: ["DEFAULT_GROUP"])
组(群)列表, 只有在同一个组的用户会互相连接
status_share_user_list : list (Default: None)
状态分享用户列表, 不设置不会共享任何用户, 设置了只分享列表中的用户
设置为 status_share_user_list="ALL" 则分享给所有用户
share_object_user_info_dict : dict (Default: None)
变量共享用户信息字典, 不设置不对变量共享做限制
设置为 share_object_user_info_dict={"name": ["Foo"]} 则 name 变量只会共享给 Foo 用户
ip_whitelist : list (default [])
ip白名单, 在这个白名单内的ip会忽略拉黑, 只有白名单IP可以连接
forced_encryption : bool (default False)
是否强制加密, 设置为 True 后对方必须开启加密才能连接
data_version_record : int (>0 default 3)
本地数据存储, 历史数据版本保留数量
mail_info_list : list[dict]
SMTP 用户信息列表, 包含 账户, 密码, SMTP服务器地址, SMTP端口
mail_info_list = [
{
"user" : "[email protected]",
"password" : "AAAAAAAAAAAA",
"host" : "xxx.mail.com",
"port" : 465,
}
]
mail_to_list : list
默认收件人邮箱地址列表, eg: ["[email protected]", "[email protected]"]
protocol : str (default "pickle")
序列化协议, 可选: "json", "pickle", "cloudpickle", "dill"
check_repeat : bool (default False)
是否检测重复连接, True: 不允许重复连接 False: 新连接的会覆盖旧连接(验证后)
enable_gpu_monitor : bool (default False)
是否启动 GPU 监控, 监控 GPU 状态, 默认不启动
room_connection_error_retries : int (default 5)
连接 Room 失败时重试连接次数
timeout : int (default 600)
当和其他用户通讯时, 如果其他用户断线等待的时间(秒)
"""
user_name
用户名, 必要参数, 命名要符合变量命名规则, 推荐使用全英文加数字后缀.
user_name = "Foo"
user_password
用户密码, 不填默认随机
user_password = "abc123"
room_ip
room 服务ip, 默认本机本地ip, 多网卡下可能和预期不同, 需要手动填写指定.
room_ip = "192.168.xxx.xxx"
room_port
room 服务端口, 默认2428.
room_port = 2428
room_password
room 密码, 默认 "Passable".
room_password = "Passable"
local_ip
本机局域网ip,不填写系统自动获取,优先获取优先级高的网卡本地ip.
local_ip = "192.168.xxx.xxx"
public_ip
公网ip, 默认为空, 表示不拥有公网ip.
public_ip = "xxx.xxx.xxx.xxx"
如果本机拥有公网ip填写public_ip后本机被标记为公网ip用户, 除了内网互联其他用户连接本用户都将通过此公网ip进行连接
server_port
User 服务端口, 默认系统随机分配.
server_port = 10000
请注意需要在各种安全组或防火墙开启此端口
lan_id
局域网id, 需要手动设置, 默认都一样为 "Default".
lan_id = "NET_A"
同一局域网的用户请设定相同的局域网id, 这样同一内网下的用户将直接局域网互相连接
log
日志等级, 默认 "INFO":
-
None: 除了错误什么都不显示
-
"INFO": 显示基本连接信息
-
"DEBUG": 显示所有信息
log = "INFO"
password_digits
密码位数, 默认16位.
password_digits = 16
encryption
是否加密传输, 默认开启加密, 不开启加密略微提升传输效率, 主要是 AES 加密的损耗
encryption = True
white_list
用户名称白名单列表, 默认为空, 只有白名单内的用户可以连接.
white_list = ["Bar", "Too"]
black_list
用户名称黑名单列表, 默认为空, 黑名单内的用户不可连接.
black_list = ["Too"]
safe_path_list
安全文件目录列表, 文件传输功能若设置了该变量, 那么所有允许传输的文件必须在该文件目录下, 如果传输了非法的文件, 会报一个警告异常!
safe_path_list = ["G:/abc/"]
log_config_file
日志配置文件路径, 默认为用户目录下的 .User/LOG_CONFIG.py
log_config_file = "G:/abc/MY_LOG_CONFIG.py"
group_list
组(群)列表, 只有在同一个组的用户会互相连接, 默认为 ["DEFAULT_GROUP"]
这个参数可以用来控制服务端的可见性, 比如服务端随机设置了一个密码字符串 "$fAd32Sd*das^&" 作为自己的组ID, 只有知道这个密码的其他客户端用户设置了自己的 group_list 才能连接服务端.
status_share_user_list
状态分享用户列表, 不设置不会共享任何用户, 设置了只分享列表中的用户
# 所有用户都会收到本机共享的状态信息
status_share_user_list="ALL"
# 只有 Foo 和 Bar 用户可以收到本机共享的状态信息
status_share_user_list=["Foo", "Bar"]
share_object_user_info_dict
变量共享用户信息字典, 不设置不对变量共享做限制
# name 变量只会共享给 Foo 用户, 未设置的变量不做限制
share_object_user_info_dict={"name": ["Foo"]}
ip_whitelist
ip白名单, 在这个白名单内的ip会忽略拉黑.
ip_whitelist = ["192.168.0.100"]
forced_encryption
是否强制加密, 设置为 True 后对方必须开启加密才能连接
forced_encryption = True
data_version_record
本地数据存储, 历史数据版本保留数量, 就是 celldict 包中的 version_record 参数
data_version_record = 3
mail_info_list
SMTP 邮件服务账户信息等, 按照格式构造, 如果有多个账户信息, 那么发送邮件的时候会随机选择一个用于邮件发送, 注意发送邮件不要调用过于频繁, 会被 SMTP 服务器异常处理.
mail_info_list = [
{
"user" : "[email protected]",
"password" : "AAAAAAAAAAAA",
"host" : "xxx.mail.com",
"port" : 465,
}
]
mail_to_list
收件人地址列表
mail_to_list = ["[email protected]", "[email protected]"]
protocol
底层序列化协议, User 默认为 pickle 协议.
protocol = "pickle"
check_repeat
是否检测重复登录, 默认 False 不检测, 验证 User 身份后, 后连接的同名 User 会顶替旧的 User, 设置为 True 后不允许重复登录.
check_repeat = False
该功能是为了解决双端连接用户信息不匹配, 造成一端尝试重连导致用户重复而重连失败. (Linux 和 Windows 连接可能出现).
警告: 但是默认情况下, 如果用户同时启动了两个同名, 且信息正确的用户, 那么这两个用户会互相竞争连接, 最后的结果是触发 Room 的流控限制, 有一端或者双端都出现了连接失败, 所以必须要注意不能出现两个同名用户进行连接.
enable_gpu_monitor
是否启动 GPU 监控, 监控 GPU 状态, 默认不启动, 启用会在自身状态中增加 GPU 信息并在 Room Gui 中显示.
enable_gpu_monitor = True
启用该功能会在系统中启动一个服务, 该服务在程序正常结束后自动删除
默认不启用是因为该功能可能引发程序奔溃, 需要按需测试!
room_connection_error_retries
连接 Room 失败时重试连接次数
room_connection_error_retries = 5
注意
需要注意的有 public_ip、server_port、lan_id 三个参数
- 具有公网IP的机器才需要设置
public_ip - 有些机器的环境有安全组或防火墙什么的,需要放通相应的端口,所以此类机器需要指定
server_port - 在同一局域网内的用户指定为相同的
lan_id,好让他们互相使用局域网直接互相连接
新建 User 会默认新建 LOG_CONFIG.py 日志文件.
RunController 运行控制器
def fun1():
print("fun1 run!")
def fun2():
print("fun2 run!")
user.run_controller.add_function("fun1", fun1)
user.run_controller.add_function("fun2", fun2)
user.run_controller.run() # 会阻塞运行
运行 RunController 控制器后可以方便的使用命令运行提前设置的函数等, 这个功能一般用在服务端.
λ:h
2025-03-10 11:08:48 | RunController | 📋 当前保存的函数列表:
1 : fun1
2 : fun2
2025-03-10 11:08:48 | RunController | help(h) 显示帮助, clc 清屏, exit 退出!
λ:1
fun1 run!
λ:2
fun2 run!