我一直在尝试用 python3 中的 flask-socketio 服务器替换 node.js socket.io 服务器。然而,经过多次尝试,包括不同的方法,都没有产生好的结果。有人可以指出我哪里出错了吗?
var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);
io.on('connection', function(socket){
socket.on('event', function(msg){
io.emit('event', msg);
console.log(msg);
});
});
http.listen(3000, function () {
console.log('Socket.io Running');
});
我在 python3 中尝试使用 Flask-socketio 并将其引用为 docs在下面:
from flask import Flask, render_template
from flask_socketio import SocketIO, emit
app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret!' # is this the default or does this have no effect ?
socketio = SocketIO(app)
@socketio.on('connect')
def test_connect():
print('Connected!! ')
@socketio.on('disconnect')
def test_connect():
print('Disconnected!! ')
@socketio.on('message')
def test_connect():
print('Msg came!! ')
@socketio.on('json')
def test_connect():
print('JSON is here!! ')
@socketio.on('event')
def test_event(msg):
print('In test_event function.')
emit('event', msg)
if __name__ == '__main__':
socketio.run(app, port = 3000)
node.js 版本完美运行。 但是,我不能对 python 说同样的话。
- 确实会出现连接和断开打印行。
- 但是永远不会调用事件函数(或其中的打印函数)。既不调用消息也不调用 json 事件。
- 客户端使用 AngularJS 并发出基本的 Socket.io 事件。
- 删除“SECRET_KEY”配置无效。服务器会连接和断开连接。
客户端应该没有任何影响,因为 node.js 服务器运行良好。但为了以防万一,有人需要它,它就在这里。
客户端代码:
function copy(data) {
return JSON.parse(JSON.stringify(data));
}
function addUUID(data) {
if (Array.isArray(data)) {
return data.concat([UUID]);
} else {
var temp = copy(data);
temp.UUID = UUID;
return temp;
}
}
socket.emit('event', addUUID(data))
最佳答案
因此,由于某种原因我仍然无法找出原因,因此我能够使用 python-socketio ( docs ) 而不是 Flask-SocketIO 在 python 中实现一个工作的 socket.io 服务器。无论如何,这是实现:
import socketio
import eventlet
from flask import Flask, render_template
sio = socketio.Server()
app = Flask(__name__)
@sio.on('connect')
def connect(sid, environ):
print('connect ', sid)
@sio.on('event')
def message(sid, data):
print('msg ', data)
@sio.on('disconnect')
def disconnect(sid):
print('disconnect ', sid)
if __name__ == '__main__':
# wrap Flask application with socketio's middleware
app = socketio.Middleware(sio, app)
# deploy as an eventlet WSGI server
eventlet.wsgi.server(eventlet.listen(('', 3000)), app)
关于javascript - 用 python 服务器替换 Nodejs Socket.io 服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41011823/