I am using socket.io
in a python-react app using the python-socketio
and socket.io-client
. The client is showing an error when it connects to the server and before triggering the connect
event.
Server:
import asyncio
from aiohttp import web
import socketio
from aiohttp_middlewares import cors_middleware
from aiohttp_middlewares.cors import DEFAULT_ALLOW_HEADERS
sio = socketio.AsyncServer(async_mode='aiohttp',cors_allowed_origins='*')
app=web.Application()
sio.attach(app)
async def index(request):
return web.Response(text="hello", content_type='text/html')
@sio.event
async def connect(sid, environ):
print('Client connected',sid)
await sio.emit('message', "good")
@sio.event
def disconnect(sid):
print('Client disconnected',sid)
@sio.on('message')
async def print_message(sid, message):
print("Socket ID: " , sid)
print(message)
app.router.add_get('/', index)
if __name__ == '__main__':
web.run_app(app)
Client (React):
import io from "socket.io-client"
let socket;
.
.
.
componentDidMount(){
socket = io('http://localhost:8080/', {transports:['websocket'], upgrade:false});
socket.on('connect', ()=> {
socket.on('message',(data)=>{console.log(data)})
});
socket.on('disconnect', () => {
console.log(socket.connected);
});
}
Error printed in the console:
The files are related to the socket.io-client
Uncaught TypeError: Cannot read property 'sid' of undefined
at Socket.onpacket (socket.js:189)
at Manager.<anonymous> (index.js:21)
at Manager.push../node_modules/component-emitter/index.js.Emitter.emit (index.js:145)
at Manager.ondecoded (manager.js:209)
at Decoder.<anonymous> (index.js:21)
at Decoder.push../node_modules/component-emitter/index.js.Emitter.emit (index.js:145)
at Decoder.add (index.js:117)
at Manager.ondata (manager.js:201)
at Socket.<anonymous> (index.js:21)
at Socket.push../node_modules/component-emitter/index.js.Emitter.emit (index.js:145)
at Socket.onPacket (socket.js:387)
at WS.<anonymous> (socket.js:196)
at WS.push../node_modules/component-emitter/index.js.Emitter.emit (index.js:145)
at WS.onPacket (transport.js:103)
at WS.onData (transport.js:96)
at WebSocket.ws.onmessage (websocket.js:115)
I'm getting the same error when using last version of socket.io-client on Node.js. If I use an older version like v2.3.0 I don't get any error.
I know this downgrade is solving the issue for some people, but if you want to use latest version (I'm not an expert on socket.io) please check this post where they talk about some changes in the API and solve some inconsistencies:
https://socket.io/docs/v3/migrating-from-2-x-to-3-0/index.html