【发布时间】:2019-05-24 12:44:49
【问题描述】:
我有一个 Node.js 应用程序,它使用 socket.io-client 向使用 socketio 包的 Python 服务器发送请求。
在 Node.js 中:
const sio_socket = require('socket.io-client')('http://localhost:7284');
app.post('/test', function(req, res) {
console.log("sending test message");
sio_socket.emit("test", "test data",
(data) => {
if (err) {
console.log("error during test: " + err);
} else {
console.log("test answer: " + data)
}
});
res.end();
});
在 Python 中:
import socketio
import eventlet
sio = socketio.Server()
app = socketio.WSGIApp(sio)
@sio.on('connect')
def connect(sid, environ):
print('connect ', sid)
@sio.on('test')
def respond_test(sid, data):
print("received test message: {}".format(data))
return "test success"
@sio.on('disconnect')
def disconnect(sid):
print('disconnect ', sid)
if __name__ == '__main__':
eventlet.wsgi.server(eventlet.listen(('', 7284)), app)
我用curl 向 Node.js 应用发送请求:
$ curl -P 3000 -X POST localhost:3000/test
Node 应用收到它:
sending test message
POST /test 200 1.263 ms - -
但是 Python 服务器什么也没打印。只有当我关闭 Node 应用程序(使用 Control-C)时,它才会打印一些东西:
127.0.0.1 - - [24/May/2019 14:42:43] "GET /socket.io/?EIO=3&transport=polling&t=Mhft8LT&b64=1&sid=75d4fb4223044bc6984d877c92132faf HTTP/1.1" 200 0 59.018009
我希望 Node 应用程序打印“测试答案:测试成功”,因为这是 Python 处理程序的返回值,并且我已经读到这个返回值被发送回客户端。
我做错了什么?
【问题讨论】:
-
这是哪个版本的python?我收到 AttributeErrors:
module 'socketio' has no attribute 'Server' -
@C.Nivs 这是 Python 3.7.2,来自 pip 的 socketio 0.1.7。
-
如果 python 中没有打印任何内容,则客户端消息不会到达 python 服务器。
-
不是,我只是注意到了这一点。所以这个事件不是由 Python 服务器处理的。
-
我尝试使用节点服务器和节点客户端,如果你愿意,我会分享代码
标签: python node.js socket.io python-3.7