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

Socket.IO客户端连接服务器遇问题:异常地址http://localhost:0.0.0.0.8080无法访问

Socket.IO服务器地址异常及代码修复方案

问题分析

服务器控制台显示地址http://localhost: 0.0.0.0.8080是输出格式异常,实际aiohttp默认绑定0.0.0.0:8080,但代码里的多处错误导致无法正常访问和建立Socket连接:

  • 路由注册逻辑错误,仅在收到message事件时才添加根路由,服务器启动初期无有效HTTP路由
  • 异步Socket.IO服务器使用同步事件处理函数,不符合AsyncServer的运行要求
  • 事件处理函数参数格式错误,无法正确获取Socket ID

修复后的服务器代码

from aiohttp import web
import socketio

# 初始化异步Socket.IO服务器
socket_io = socketio.AsyncServer()
app = web.Application()
socket_io.attach(app)

# 提前注册根路由,服务器启动时即可访问
async def index(request):
    return web.Response(text='Hello world from socketio', content_type='text/html')

app.router.add_get('/', index)

# 异步事件处理函数,适配AsyncServer要求
@socket_io.on('message')
async def print_message(data, sid):
    print(f"Socket ID: {sid}")
    print(f"Data : {data}")

if __name__ == '__main__':
    # 明确指定绑定地址,控制台会正常输出正确地址
    web.run_app(app, host='0.0.0.0', port=8080)

客户端代码(无需修改,确保服务器启动后再运行)

import socketio
sio = socketio.Client()

@sio.event
def connect():
    print('connection established')

@sio.event
def disconnect():
    print('disconnected from server')

sio.connect('http://localhost:8080')
sio.emit('message', {'data':'my_data'})
sio.wait()

关键修复点说明

  • 路由注册调整:将根路由注册代码移到事件处理函数外,确保服务器启动时就完成路由绑定,避免HTTP请求404
  • 异步函数适配:将事件处理函数改为async def格式,匹配AsyncServer的异步运行机制
  • 参数格式修正:AsyncServer的事件处理函数中,sid(Socket ID)作为第二个参数传入,直接即可获取
  • 明确绑定地址:通过web.run_app指定host和port,控制台会显示Running on http://0.0.0.0:8080,此时访问http://localhost:8080即可正常连接

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 00:09:23