python-socketio Emit似乎可以随机运行

时间:2019-02-01 09:27:46

标签: python node.js socket.io

很抱歉,如果我的问题已经存在,但我在互联网上搜索了很多内容,却没有找到解决方案。 实际上,我已经尝试了一些问题解决方案,它们看起来与我的解决方案相似,但我只是变得更加困惑:/

因此,我尝试在python中构建服务器以与Node.js客户端进行通信。 我发现python-socketIO可以做到这一点,这似乎是一个不错的解决方案,但不幸的是,我不明白为什么要从服务器发送到nodejs客户端。 实际上,当我将客户端连接到服务器时,客户端连接没有问题,我可以将消息从客户端(nodejs)发送到服务器(python),服务器收据正确。但是,当我从服务器端使用emit()方法回答时,它的工作方式很奇怪。 就像客户收据一样,我有时会发出有时不是的消息... 我不明白为什么 因为如果我在服务器端发出错误消息,为什么有时可以正常工作?

我尝试使用不同的解决方案“ python-socketio”或“ flask-socket-io”,但这是完全相同的问题。 此外,我看到一些人在互联网上使用它的工作更好Redis的时候,但我不知道正确认识Redis的,当我试图做的比我所看到的它仍然没有工作一样:/

那么,有人可以帮助我吗?

我将服务器和客户端(Python / nodejs)放在这里

服务器

rom flask import Flask, render_template
from flask_socketio import SocketIO
from flask_socketio import send, emit
import json
#import eventlet
#import redis
#eventlet.monkey_patch()

#from status.status import Status

app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret!'
socketio = SocketIO(app)
#status = Status()

@socketio.on('connect')
def test_connect():
    emit('my response', {'data': 'Connected'})

@socketio.on('disconnect')
def test_disconnect():
    print('Client disconnected')

def ack():
    print("callback was receipt")
    pass

@socketio.on('transaction')
def test_transaction(data):
    data = json.loads(data)
    print("message from transaction\n")
    print("market id : {}  ".format(data['market_id']))
    print("user id : " + data['user_id'] + "   ")
    print("total price : " + data['total_price'] + "   ")
    emit('succeed', "OK", callback=ack)
    pass

if __name__ == '__main__':
    socketio.run(app, port=8080)

客户

//client.js
var io = require('socket.io-client');
var json = require('json');
var socket = io.connect('http://localhost:8080', {reconnect: true});

socket.on('succeed', function(message, back) {
  console.log(message);
  console.log('succeed');
  back();
});

socket.on('rejected', function(message) {
  console.log(message);
  console.log('rejected');
});

// Add a connect listener
socket.on('connect', function () {
  var arr = [22334421, 47631470, 12342378, 72430096];
  var ans = {"market_id":"12", "user_id":"1", "total_price":"200", "items": arr};
    console.log('Connected!');



    socket.emit("transaction", JSON.stringify(ans));
});

与烧瓶这一个吧,IY你想看到我所做的与Python-socketio不要犹豫,问,我也可以共享,但是这是同样的问题...

也许尝试在笔记本电脑上了解它为什么很奇怪?

我知道它不能正常工作,因为回调函数“ ack”被一次调用十次。并且“成功”之类的消息也会完全随机出现。 所以我不知道发射会发生什么。

如果有人可以提供帮助,请给我一些解释,我将非常高兴!

谢谢

0 个答案:

没有答案