Я хотел отправить сжатый файл с сервера клиенту, используя WebSocket.
Код на стороне сервера:
@app.route('/websocket')
def handle_websocket():
print("getting here")
wsock = request.environ.get('wsgi.websocket')
if not wsock:
abort(400, 'Expected WebSocket request.')
while True:
try:
# passing the information as a dictionary
message = wsock.receive()
data = json.loads(message)
container = data[0]
imag1 ='./download/png_files'
newaddress_asc ='./download/asc_files'
newaddress_tif ='./download/tif_files'
# message is dictionary
projCod = container["param1"]# EPSG code: 4326
pntNumb = container["param2"]# point number
dictionary=Com_pro.Dcomputing(projCod,pntNumb)
writefile.loadresulttoaddress(dictionary,'png',imag1)
zipfilename='D_result.zip'
open_path ='./download/'
save_path = open_path
writefile.compress_save_file(zipfilename,open_path,save_path)
filename='DSM_result.zip'
static_file(filename, root='./download', download=filename)
wsock.send(filename)
except WebSocketError:
break
from gevent.pywsgi import WSGIServer
from geventwebsocket import WebSocketError
from geventwebsocket.handler import WebSocketHandler
server = WSGIServer(("0.0.0.0", 8081), app,
handler_class=WebSocketHandler)
server.serve_forever()
Клиентская сторона кода:
function test(){
var ws = new WebSocket("ws://example.com:8080/websocket");
var clusternumber = 4;
var vertex = {row: 11,
value: "(-122.31088757514952,38.351500957145674)_(-122.30862379074097,38.352796664075726)_(-122.30824828147888,38.35236756889378)_(-122.30908513069151,38.35192164375559)_(-122.30877399444577,38.35158509466319)_(-122.30821609497069,38.351904816338134)_(-122.30743288993834,38.351055026670906)_(-122.30881690979002,38.35028095215651)_(-122.3073363304138,38.34822793185049)_(-122.30818390846251,38.34784088051842)_(-122.30822682380675,38.347849294699785)_"};
// var vertex.value = [-122.19276309013367,38.13030324622909]
var terrainatrribute = "Height,Curvature,Slope,Wetness,Position,";
var soilfunction = "ClassMap,";
var data = [];
ws.onopen = function() {
data.push( {"param1": 'EPSG:4326', "param2": vertex.row,
"param3":vertex.value, "param4":clusternumber,
"param5":soilfunction, "param6":terrainatrribute,});
console.log(JSON.stringify(data))
ws.send(JSON.stringify(data));
};
ws.onmessage = function (evt) {
console.log("This is is what is being returned from the server");
alert(evt.data);
};
ws.onerror = function( evt ){
alert(evt.data);
}
}
Для строкового типа данных код работает отлично. Однако, когда я пытаюсь отправить сжатый файл, он не работает. Я получаю тип данных возврата
[объект Blob]
Я прочитал в Интернете на документацию по бутылке , что «Все, что имеет метод .read (), обрабатывается как файл или подобный файлу объект и передается в вызываемый элемент wsgi.file_wrapper
, определенный сервером WSGI. фреймворк. Некоторые реализации сервера WSGI могут использовать оптимизированные системные вызовы (sendfile) для более эффективной передачи файлов. В других случаях это просто повторяет
над кусками, которые вписываются в память. Необязательные заголовки, такие как Content-Length или Content-Type, не являются
установить автоматически. Используйте send_file()
, если это возможно.
Я немного озадачен тем, как использовать эти функции. И если я должен реализовать свой собственный обработчик, у вас есть какие-либо предложения. Я очень ценю вашу помощь, спасибо.