簡體   English   中英

Azure Functions 和本地 TCP 服務器

[英]Azure Functions and local TCP server

我有一個 HTTP 觸發的 Azure 函數,它從數據庫獲取數據並通過 TCP/IP 將其發送到用 Python 編寫的本地服務器。 本地一切正常。 但是在我將該功能部署到 Azure 門戶后,我無法連接到本地服務器以在那里發送數據。 我該如何解決這個問題?

下面是我的代碼:

module.exports = async function (context, req) {
context.log('JavaScript HTTP trigger function processed a request.');
const net = require('net');

var Connection = require('tedious').Connection;
var Request = require('tedious').Request;  


// connect to DB
var config = {
    authentication: {
        options: {
            userName: '',
            password: '' 
        },
        type: 'default'
    },
    server: '', 
    options:
    {
        database: '', 
        encrypt: true,
    }
};  

if (req.body) {

    var connection1 = new Connection(config);
        connection1.on('connect', function(err){ 
        console.log("Connected to DataBase");

        var request1 = new Request("SELECT 
KeyFigure.id,KeyFigure.unit_id,KeyFigure.week,KeyFigure.daily_gain,
FROM KeyFigure INNER JOIN KeyFigureDelivery ON 
KeyFigure.id=KeyFigureDelivery.key_figure_id WHERE 
KeyFigureDelivery.delivered=0", function(err, rowCount, rows){  
            console.log(rowCount + ' row(s) returned');
            if (err) {
                var client_1 = new net.Socket();
                client_1.connect(9000, '127.0.0.1', function() {
                    console.log('Connected to Server');
                    client_1.write(JSON.stringify("No data to send...from 
KeyFigure"));//'Data was written to a Data Base.');
                    client_1.destroy(); //close()
                });
                console.log("Error in Database KeyFigure");
                connection1.close();
                console.log("Disconnected_1 because of Error");
            }
            if (rowCount == 0) {
                var client_2 = new net.Socket();
                client_2.connect(9000, '127.0.0.1', function() {
                    console.log('Connected to Server');
                    client_2.write(JSON.stringify("No data to send...from 
KeyFigure"));//'Data was written to a Data Base.');
                    client_2.destroy(); //close()
                });
                connection1.close();
                console.log("Disconnected_1 because of 0 Rows")
            }
        });  

        request1.on('row', function(columns) {
            var DataToSend = [];
            var rowdata = new Object()
            columns.forEach(function(column) {
                //console.log("%s\t%s", column.metadata.colName, 
column.value);
                //DataToSend.push([String(column.metadata.colName) + ":" 
+ String(column.value)])
                    rowdata[column.metadata.colName] = column.value;
                });
            DataToSend = rowdata
            var client1 = new net.Socket();
            client1.connect(9000, '127.0.0.1', function() {
                console.log('Connected to Server');
                client1.write(JSON.stringify(DataToSend));//'Data was 
written to a Data Base.');
                //client.destroy(); //close()
                client1.on('data', function(data) {
                    console.log('Received: ' + JSON.parse(data).id);
                    //client.destroy();
                    var dataIn1 = JSON.parse(data)

                    if (dataIn1.status == 200){
                        var connection_in1 = new Connection(config);
                        connection_in1.on('connect', function(err){ 
                            console.log("Connected");
                            var request_in1 = new Request("UPDATE 
KeyFigureDelivery SET delivered = 1 WHERE key_figure_id= 
"+dataIn1.id+";", function(err, rowCount, rows){  
                            //console.log(rowCount + ' row(s) returned'); 
UPDATE KeyFigureDelivery SET delivered = 1 WHERE key_figure_id= 
"+data+";"
                            if (err) {
                                console.log("Error in Database 
KeyFigure");
                            }
                            });  
                                request_in1.on('row', function(columns) {
                                    columns.forEach(function(column) {                    
                                    });
                                    context.res = {
                                        status: 201, 
                                        body: "Input Data is Valid and 
Accepted.\n"
                                    };
                                    connection_in1.close();      
                                });
                                connection_in1.execSql(request_in1);  
                        }); 
                    }
                    else {
                        console.log("Data was not delivered!!..from 
Server...KeyFigure")
                    } 
                });
                client1.on('error', function(err){
                    console.log("Error: "+err.message);
                });
                //client1.destroy();
                connection1.close();
            });
        });
        request1.on('doneInProc', function (rowCount, more, rows) { 
            connection1.close();
            console.log("Connection 1 closed...")
        });
        connection1.execSql(request1); 
    });
}
else{
context.res = {
        status: 400,
        body: "Please pass a name on the query string or in the request 
body."
    };

};

我需要的是:(azure 函數)從數據庫中獲取數據,將其發送到服務器,如果數據有效 - 服務器向客戶端發送消息(azure 函數),更新數據庫中的表。 所有這一切都在一個 HTTP 觸發的 Azure 函數中完成。 怎么可能呢?

感謝您的幫助

Azure Functions 中(當前)不支持 Web 套接字。 有關詳細信息,請參閱此 Github 線程: https : //github.com/Azure/Azure-Functions/issues/738

總之,圍繞設計、計費和技術實施存在未決問題。 我認為這些問題有合理的解決方案,一旦此功能在我們的優先級列表中足夠高,我們就需要開始處理它們。

如果你有一個真實的案例,你應該在 Github 線程上發表評論。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM