You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flow启动SUMO多客户端TraCI数据采集端口及连接异常求助

Flow+SUMO多TraCI客户端问题排查与解决

问题说明

  • Flow未按指定配置分配端口:明明在SumoParams里指定了45678端口,但实际SUMO启动后用的是随机端口(比如代码里的49745)
  • 跨机TraCI连接异常:第二台机器能连上第一台的SUMO仿真,但连接后程序直接退出,数据没保存,第一台的仿真却能正常运行

第一台机器(仿真启动端)代码

sim_params = SumoParams(port=45678, render=VISUALIZE_SIM_IN_SUMO, sim_step=1, num_clients=2)

第二台机器(数据采集端)代码

# 因为Flow一开始没用到指定端口,得等第一台启动仿真后再看实际端口
PORT = 49745

traci.init(PORT,tc.DEFAULT_NUM_RETRIES,"second_computer.local")
traci.setOrder(2) # 只要每个客户端序号唯一就行

解决建议

1. 修复Flow端口不生效的问题

  • 升级Flow版本:旧版Flow存在端口参数被忽略的bug,直接更新到最新稳定版大概率能解决
  • 手动指定SUMO启动命令:如果升级没用,直接给Flow传完整的SUMO启动命令,强制绑定端口:
sumo_cmd = ["sumo", "-c", "你的仿真配置文件.sumocfg", "--remote-port", "45678", "--num-clients", "2"]
sim_params = SumoParams(sumo_cmd=sumo_cmd, render=VISUALIZE_SIM_IN_SUMO, sim_step=1)
  • 检查端口占用:先用netstat -ano | findstr 45678(Windows)或ss -tulpn | grep 45678(Linux)确认端口没被别的进程占用,被占的话Flow会自动换端口

2. 解决TraCI连接后立即退出的问题

  • 添加持续运行循环:当前代码只做了连接和设置序号,没有持续运行逻辑,程序自然会直接结束。要加循环跟随仿真步骤,同时采集数据:
import traci
import traci.constants as tc

PORT = 45678  # 端口问题解决后直接用指定值
traci.init(PORT, tc.DEFAULT_NUM_RETRIES, "第一台机器的IP或主机名")  # 注意填第一台的地址,不是自己的
traci.setOrder(2)

try:
    # 只要仿真还有车辆就持续运行
    while traci.simulation.getMinExpectedNumber() > 0:
        traci.simulationStep()
        # 这里添加数据采集逻辑,比如保存车辆速度
        all_vehicles = traci.vehicle.getIDList()
        for veh_id in all_vehicles:
            speed = traci.vehicle.getSpeed(veh_id)
            # 写入数据到文件
            with open("sim_data.txt", "a", encoding="utf-8") as f:
                f.write(f"{traci.simulation.getTime()}, {veh_id}, {speed}\n")
finally:
    traci.close()
  • 核对客户端序号:第一台的Flow客户端默认序号是1,第二台要设为2,同时num_clients必须设为2,序号不匹配会导致客户端同步失败直接退出
  • 检查网络与防火墙:确保两台机器在同一局域网,第一台的防火墙放开45678端口的入站连接,用telnet 第一台IP 45678测试端口连通性

内容的提问来源于stack exchange,提问作者Lorenzo_1997

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 02:35:20