Socket.IO请求未收到响应

时间:2019-05-24 12:44:49

标签: python node.js socket.io python-3.7

我有一个使用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处理程序的返回值,并且我已经阅读到该返回值被发送回客户端。

我在做什么错了?

1 个答案:

答案 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);
});