我有一个使用socket.io-client
的Node.js应用程序,它使用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处理程序的返回值,并且我已经阅读到该返回值被发送回客户端。
我在做什么错了?
答案 0 :(得分:1)
示例Socket IO节点客户端和服务器
节点服务器版本2.2.0
const io = require('socket.io')();
io.on('connection', function (socket) {
socket.on('ferret', function (name, word, fn) {
fn(name + ' says ' + word);
});
});
io.listen(3000);
节点客户端版本2.2.0
const sio_socket = require('socket.io-client')('http://localhost:3000');
sio_socket.emit('ferret', 'tobi', 'woot',
(data) => {
console.log(data);
});