如何为iOS客户端和Python服务器使用Socket.IO?

2024-04-19 18:25:45 发布

您现在位置:Python中文网/ 问答频道 /正文

老实说,我的脑袋都快被这个弄死了

我只想简单地将python脚本(在raspberry pi上)连接到我的iOS swift应用程序。除了python端的一个明显的“连接”(应该充当服务器)之外,任何东西都不起作用。我对socket.io swift客户端使用thisrepo,对python socket.io服务器使用this

我在他们的两个文档上都尝试了这两个代码示例,没有发生任何事情,没有共享任何数据,python服务器脚本似乎认为在我运行应用程序时存在连接,但应用程序的想法不同。发送消息不起作用,回调/确认也不起作用,我肯定做错了什么

我已经成功地将这个python脚本连接到Node.js驱动的后端,没有任何问题,而且它工作得完美无缺

这是我的Swift iOS客户端代码:

let manager = SocketManager(socketURL: URL(string: "http://\(hubIP ?? "0.0.0.0"):8080")!, config: [.log(true), .compress])
let socket = manager.defaultSocket
            
socket.on(clientEvent: .connect) {data, ack in
        print("socket connected")
}
            
socket.on("callback") {data, ack in 
        print(data)
}
               
socket.connect()

这是我的python(服务器)端代码:

@sio.event 
async def connect(sid, environ):
    print('Connection', sid)
    await sio.emit('callback', "testing")

@sio.event
def disconnect(sid):
    print('Disconnection')

@sio.event
def update(data):
    print(data)

现在,当我在python shell中运行我的应用程序时,它会打印:

Connection 9a39ca47581a4a4fa13a6ab0ae49d2c9

然而,从我所看到的情况来看,socket.on(clientEvent: .connect)并没有在iOS端启动

这是我在Xcode中启用调试时的控制台:

2020-08-31 21:09:37.633585+0100 [46528:929263] LOG SocketIOClient{/}: Adding handler for event: connect
2020-08-31 21:09:37.633846+0100 [46528:929263] LOG SocketIOClient{/}: Adding handler for event: callback
2020-08-31 21:09:37.634416+0100 [46528:929263] LOG SocketIOClient{/}: Handling event: statusChange with data: [connecting, 2]
2020-08-31 21:09:37.634731+0100 [46528:929263] LOG SocketIOClient{/}: Joining namespace /
2020-08-31 21:09:37.634935+0100 [46528:929263] LOG SocketManager: Tried connecting socket when engine isn't open. Connecting
2020-08-31 21:09:37.635093+0100 [46528:929263] LOG SocketManager: Adding engine
2020-08-31 21:09:37.636300+0100 [46528:929263] LOG SocketManager: Manager is being released
2020-08-31 21:09:37.636367+0100 [46528:929411] LOG SocketEngine: Starting engine. Server: http://192.168.0.33:8080
2020-08-31 21:09:37.636523+0100 [46528:929411] LOG SocketEngine: Handshaking
2020-08-31 21:09:37.636528+0100 [46528:929263] LOG SocketIOClient{/}: Client is being released
2020-08-31 21:09:37.637237+0100 [46528:929411] LOG SocketEnginePolling: Doing polling GET http://192.168.0.33:8080/socket.io/?transport=polling&b64=1
2020-08-31 21:09:37.677613+0100 [46528:929414] LOG SocketEnginePolling: Got polling response
2020-08-31 21:09:37.677835+0100 [46528:929414] LOG SocketEnginePolling: Got poll message: 109:0{"sid":"6cf19e66c3e34fe09b59cd452f6ec49a","upgrades":["websocket"],"pingTimeout":60000,"pingInterval":25000}24:42["callback","testing"]2:40
2020-08-31 21:09:37.678339+0100 [46528:929414] LOG SocketEngine: Got message: 0{"sid":"6cf19e66c3e34fe09b59cd452f6ec49a","upgrades":["websocket"],"pingTimeout":60000,"pingInterval":25000}
2020-08-31 21:09:37.683767+0100 centreCore[46528:929414] LOG SocketEngine: Got message: 42["callback","testing"]
2020-08-31 21:09:37.683958+0100 [46528:929414] LOG SocketEngine: Got message: 40
2020-08-31 21:09:37.684428+0100 [46528:929414] LOG SocketEngine: Writing poll:  has data: false
2020-08-31 21:09:37.685011+0100 [46528:929414] LOG SocketEnginePolling: Sending poll:  as type: 2
2020-08-31 21:09:37.685843+0100 [46528:929414] LOG SocketEnginePolling: Created POST string: 1:2
2020-08-31 21:09:37.686503+0100 [46528:929414] LOG SocketEnginePolling: POSTing
2020-08-31 21:09:37.687064+0100 [46528:929414] LOG SocketEngine: Engine is being released

在我写这篇文章的时候,我可以从这些行中看到,它确实通过上面的这些行接收消息,只是没有接收到任何消息:

109:0{"sid":"6cf19e66c3e34fe09b59cd452f6ec49a","upgrades":["websocket"],"pingTimeout":60000,"pingInterval":25000}24:42["callback","testing"]2:40
2020-08-31 21:09:37.678339+0100 [46528:929414] LOG SocketEngine: Got message: 0{"sid":"6cf19e66c3e34fe09b59cd452f6ec49a","upgrades":["websocket"],"pingTimeout":60000,"pingInterval":25000}
2020-08-31 21:09:37.683767+0100 [46528:929414] LOG SocketEngine: Got message: 42["callback","testing"]

我可以看到显示的套接字的正确Sid,以及打印数据为“testing”的回调函数,但是为什么在代码方面什么都没有发生?我只需要先这样做,更不用说回调和ack了


Tags: eventlog应用程序messagedataconnectcallbacksocket