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
相关产品推荐
相关产品推荐

