从 Flask 更改为 NodeJS 或 UDP 或在 Flask 中使用更多线程来改善通信?
Change from Flask to NodeJS or UDP or use more threads in Flask to improve communication?
我正在创建一个简单的 android 应用程序来控制本地网络中桌面的鼠标。
我已经弄清楚如何创建预期的行为,有时效果很好,但有时速度很慢。
该应用使用 Volley 和 JsonObjectRequest 与服务器通信。
服务器正在使用 Flask 和 HTTP POSTs.
我想改进 5 件事:
- 将服务器更改为 NodeJS
- 使用UDP协议,因为我不需要确认。
- 在 Flask 中使用多个线程
- 将 Volley 更改为 OkHttp 或其他 http 库。 (可能截击不是问题,但我可能是错的。)
- 从 POST 更改为 GET(听起来很愚蠢)
所以如果问题出在服务器:
- 我应该在 Flask 中使用更多线程吗?
- 或者在 Flask 中使用 UDP 足以响应 +/- 60 req/sec?
- 或者有必要将我的服务器更改为 NodeJS 吗?
- 或者要获得 60 r/s 我需要两者,NodeJS 和 UDP?
任何其他替代方案也有效!谢谢
烧瓶代码
from flask import Flask, request
import win32api, win32con
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello World!"
@app.route("/mouse", methods=['POST'])
def mouse():
x, y = win32api.GetCursorPos()
win32api.SetCursorPos( (x + request.json['x'], y + request.json['y'] ))
if __name__ == '__main__':
app.run(host='0.0.0.0')
在Android中,在检测到视图中的触摸和移动后,将deltaX和deltaY和POST作为x和y获取到/mouse。我还限制了每秒最大请求数,但效果不佳。
MouseController.MOUSE_FRAME = 30;
private View.OnTouchListener onMouseTouch = new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
if(motionEvent.getActionMasked() == MotionEvent.ACTION_DOWN){
mouseX = motionEvent.getX();
mouseY = motionEvent.getY();
}
if(motionEvent.getActionMasked() == MotionEvent.ACTION_MOVE) {
Long now = Calendar.getInstance().getTimeInMillis();
if( now - lastTime > (1000/MouseController.MOUSE_FRAME)){
float newX = motionEvent.getX();
float newY = motionEvent.getY();
float deltaX = newX - mouseX;
float deltaY = newY - mouseY;
mouseX = newX;
mouseY = newY;
mouseController.move(deltaX, deltaY);
lastTime = now;
}
}
return true;
}
};
为了解决问题我改成了UDP通信
基于这两个教程:
Android UDP:http://www.helloandroid.com/tutorials/simple-udp-communication-example
Python UDP:https://wiki.python.org/moin/UdpCommunication
问题已解决,现在移动流畅。是的,就是这么简单。
我正在创建一个简单的 android 应用程序来控制本地网络中桌面的鼠标。
我已经弄清楚如何创建预期的行为,有时效果很好,但有时速度很慢。
该应用使用 Volley 和 JsonObjectRequest 与服务器通信。 服务器正在使用 Flask 和 HTTP POSTs.
我想改进 5 件事:
- 将服务器更改为 NodeJS
- 使用UDP协议,因为我不需要确认。
- 在 Flask 中使用多个线程
- 将 Volley 更改为 OkHttp 或其他 http 库。 (可能截击不是问题,但我可能是错的。)
- 从 POST 更改为 GET(听起来很愚蠢)
所以如果问题出在服务器:
- 我应该在 Flask 中使用更多线程吗?
- 或者在 Flask 中使用 UDP 足以响应 +/- 60 req/sec?
- 或者有必要将我的服务器更改为 NodeJS 吗?
- 或者要获得 60 r/s 我需要两者,NodeJS 和 UDP?
任何其他替代方案也有效!谢谢
烧瓶代码
from flask import Flask, request
import win32api, win32con
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello World!"
@app.route("/mouse", methods=['POST'])
def mouse():
x, y = win32api.GetCursorPos()
win32api.SetCursorPos( (x + request.json['x'], y + request.json['y'] ))
if __name__ == '__main__':
app.run(host='0.0.0.0')
在Android中,在检测到视图中的触摸和移动后,将deltaX和deltaY和POST作为x和y获取到/mouse。我还限制了每秒最大请求数,但效果不佳。
MouseController.MOUSE_FRAME = 30;
private View.OnTouchListener onMouseTouch = new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
if(motionEvent.getActionMasked() == MotionEvent.ACTION_DOWN){
mouseX = motionEvent.getX();
mouseY = motionEvent.getY();
}
if(motionEvent.getActionMasked() == MotionEvent.ACTION_MOVE) {
Long now = Calendar.getInstance().getTimeInMillis();
if( now - lastTime > (1000/MouseController.MOUSE_FRAME)){
float newX = motionEvent.getX();
float newY = motionEvent.getY();
float deltaX = newX - mouseX;
float deltaY = newY - mouseY;
mouseX = newX;
mouseY = newY;
mouseController.move(deltaX, deltaY);
lastTime = now;
}
}
return true;
}
};
为了解决问题我改成了UDP通信
基于这两个教程:
Android UDP:http://www.helloandroid.com/tutorials/simple-udp-communication-example
Python UDP:https://wiki.python.org/moin/UdpCommunication
问题已解决,现在移动流畅。是的,就是这么简单。