У меня проблема с обменом информацией между двумя машинами с помощью библиотеки socket.io.
Когда я использую оба сервера в библиотеке node.js и socket.io, я могу получить один ответ на каждое событие.
Подход Node.js
Главный сервер
const http = require('http'),
io = require('socket.io');
const server = http.createServer()
server.listen(3000);
io = io.listen(server);
console.log('=== Main Server ===')
// Add a connect listener
io.sockets.on('connection', function(socket)
{
console.log('Camera Server connected to Main Machine');
socket.on('image', function (data) {
let image = data[0]
console.log('Camera Server sends data with ID:', data[1], typeof(image));
let ID = data[1]
socket.emit('response', "Main Server says: Camera Server thanks for data with ID:" + ID++);
});
socket.on('disconnect', function() {
console.log('Camera Server disconnected.');
});
});
Клиентский сервер
var io = require('socket.io-client');
const socket = io.connect('http://192.168.1.16:3000/', {
reconnection: true
});
const wCap = new cv.VideoCapture(0);
wCap.set(cv.CAP_PROP_FRAME_WIDTH, 500);
wCap.set(cv.CAP_PROP_FRAME_HEIGHT, 400);
console.log('=== Camera Server ===')
let counter = 0
socket.on('connect', function () {
console.log('Connection with Main Machine performed');
setInterval(() => {
socket.emit('image', counter++)
}, 1500);
socket.on('response', function (data) {
console.log(data);
});
socket.on('disconnect', function() {
console.log('Connection with Main Server was ended.');
});
});
Вывод терминалов для подхода к узлу
https://i.imgur.com/neuhgfp.png
НО,
У меня естьзаменить мой главный сервер аналогичным сервером Flask. Для этого я получил этот код:
Главный сервер Flask - eventlet
from flask import Flask
from flask_socketio import SocketIO, emit, send
from random import randint
from flask_cors import cross_origin
app = Flask(_name_)
socketio = SocketIO(app, cors_allowed_origins="*")
@app.route('/')
def index():
return render_template('index.html')
def message_received(methods=['GET', 'POST']):
print('Message received!')
@socketio.on('image')
def test_message(data):
print('Message received.', data)
emit('response', data + 1, callback=message_received)
print(response)
@socketio.on('connect')
def test_connect():
print('Connected')
emit('response', {'data': 'Connected'})
@socketio.on('disconnect')
def test_disconnect():
print('Client disconnected')
if _name_ == "_main_":
print('Works')
socketio.run(app, host='192.168.1.16', port=3000)
Проблема этого решения заключается в том, что соединение между этими двумя серверами занимает много времени - гораздо больше, чемв однородном решении Node.js, а также, что является самым важным на стороне Node-Client, я получаю дублированные ответы. Существует также много проблем с созданием и поддержанием соединений - нам приходится много раз перезапускать серверы, чтобы выполнить всего один тест.
Вывод терминалов для 1. Flask / 2. Подход узла
- https://i.imgur.com/Rg190R7.png
- https://i.imgur.com/GvWIpZy.png
В чем причина этой проблемы и как ее решить?