gpt4 book ai didi

javascript - 用 python 服务器替换 Nodejs Socket.io 服务器

转载 作者:行者123 更新时间:2023-11-30 15:39:40 27 4
gpt4 key购买 nike

我一直在尝试用 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com