Tedious: Kesalahan Koneksi ESOCKET dari aplikasi web node js ke koneksi Database MSSql

Dibuat pada 25 Sep 2018  ·  19Komentar  ·  Sumber: tediousjs/tedious

Hai tim,
Saat ini, kami sering mendapatkan masalah konektivitas intermiten dari aplikasi web kami ke MsSql ketika ada lebih banyak lalu lintas ke layanan.
Apakah ada rekomendasi akhir tentang masalah ini.

Kesalahan :
_{ ConnectionError: Gagal terhubung ke <>:1433 - Tidak dapat terhubung (urutan)
di Connection.tedious.once.err (D:\home\site\wwwroot\node_modules\mssql\lib\tedious.js:216:17)
di Connection.g (events.js:291:16)
di emitOne (events.js:96:13)
di Connection.emit (events.js:188:7)
di Connection.socketError (D:\home\site\wwwroot\node_modules\tedious\lib\connection.js:699:14)
di D:\home\site\wwwroot\node_modules\tedious\lib\connection.js:590:25
di SequentialConnectionStrategy.connect (D:\home\site\wwwroot\node_modules\tedious\lib\connector.js:153:9)
di Socket.onError (D:\home\site\wwwroot\node_modules\tedious\lib\connector.js:169:16)
di emitOne (events.js:96:13)
di Socket.emit (events.js:188:7)
kode: 'ESOCKET',
asliKesalahan:_

Detail Versi:
"membosankan": "2.0.1",
"mssql": "^4.0.4",

Terima kasih,
Praveen.

Komentar yang paling membantu

mendapat kesalahan yang sama saat menggunakan kode yang disalin dari contoh resmi Microsoft: https://www.microsoft.com/en-us/sql-server/developer-get-started/node/windows/step/2.html

Akhirnya, saya memecahkan kesalahan ini dengan mengaktifkan protokol TCP/IP di "Sql Server Configuration Manager"->"SQL Server Network Configuration"->" Protocols for"->"TCP/IP"

C:\Users\zpc\Desktop\SqlServerSample>node connect.js { ConnectionError: Failed to connect to localhost:1433 - Could not connect (sequence) at ConnectionError (C:\Users\zpc\Desktop\SqlServerSample\node_modules\tedious\lib\errors.js:13:12) at Connection.socketError (C:\Users\zpc\Desktop\SqlServerSample\node_modules\tedious\lib\connection.js:1183:28) at Connector.execute (C:\Users\zpc\Desktop\SqlServerSample\node_modules\tedious\lib\connection.js:1022:21) at SequentialConnectionStrategy.connect (C:\Users\zpc\Desktop\SqlServerSample\node_modules\tedious\lib\connector.js:69:7) at Socket.onError (C:\Users\zpc\Desktop\SqlServerSample\node_modules\tedious\lib\connector.js:84:12) at Socket.emit (events.js:189:13) at emitErrorNT (internal/streams/destroy.js:82:8) at emitErrorAndCloseNT (internal/streams/destroy.js:50:3) at process._tickCallback (internal/process/next_tick.js:63:19) message: 'Failed to connect to localhost:1433 - Could not connect (sequence)', code: 'ESOCKET' }

Semua 19 komentar

Hai @ Praveen335

Saya menyesal mendengar bahwa Anda menghadapi masalah ini saat menggunakan tedious . Sayangnya, informasi yang Anda berikan tidak cukup bagi kami untuk memahami apa yang terjadi. Bisakah Anda memberikan informasi lebih lanjut? Misalnya akan sangat membantu bagi kita untuk mengetahui:

  • versi tedious yang Anda gunakan sebenarnya?
  • kapan tepatnya kesalahan ini terjadi? Dari stacktrace sepertinya ini terjadi saat menghubungkan ke database, tetapi dapatkah proses lain tetap terhubung pada saat yang bersamaan? Saya pikir ini mungkin masalah SQLServer (mungkin karena beban tinggi yang Anda sebutkan) dan bukan masalah dengan tedious itu sendiri.

Terima kasih! ️

Hai @arthurschreiber ,
Terima kasih atas tanggapan cepat Anda. Saya sudah memperbarui versi yang membosankan di posting saya.

Detail Versi:
"membosankan": "2.0.1",
"mssql": "^4.0.4",

Kami telah melihat utas kerja aktif ke server SQL dan konektivitas jaringan dengan meningkatkannya ke dukungan Microsoft. Mereka menyebutkan semua yang baik dari akhir SQLServer. Persentase utas kerja juga lebih sedikit. Saya telah mencoba mencoba lagi dengan logika khusus. Tapi tidak beruntung. Setelah mendapatkan kesalahan soket, itu terus melempar untuk semua permintaan berikutnya. Setiap saran atau rekomendasi akan sangat membantu kami. Saat ini, kami menggunakan kumpulan koneksi untuk terhubung ke Database.

Terima kasih,
Praveen.

Sama di sini, tiba-tiba menjadi seperti itu dan macet ...

Kami juga melihat kesalahan koneksi yang sama terjadi pada sistem kami.

Kami menghubungkan connectionPool saat layanan dimulai.
new App.SQL.ConnectionPool

Pada saat yang acak permintaan gagal dengan:

ConnectionError: Gagal terhubung ke datab aseserver: 1433 - Tidak dapat terhubung (urutan)

Layanan dimulai ulang secara otomatis tetapi terus memunculkan kesalahan ini selama sekitar 20 menit. Setelah itu layanan restart dan dapat terhubung kembali.

Kami melihat ini dengan beberapa proses node di server ini tetapi mereka tidak turun secara bersamaan (kadang-kadang mereka melakukannya), yang agak aneh. Kami yakin penyebabnya ada di aplikasi NodeJS dan bukan di DB mssql.

Kami menggunakan versi ini:

mssql: 4.3.0 (terbaru)
versi membosankan yang disertakan dalam paket ini adalah 2.7.1.

Hai. Kami juga mengalami masalah ini.

Ini adalah versi kami:
mssql: 4.3.0
yang menggunakan versi yang membosankan: 2.7.1

ConnectionError: Failed to connect to xxxxxx.database.windows.net:1433 in 15000ms
at Connection.tedious.once.err (...node_modules\mssql\lib\tedious.js:239:17)
at Object.onceWrapper (events.js:315:30)
at emitOne (events.js:116:13)
at Connection.emit (events.js:211:7)
at Connection.connectTimeout (...node_modules\mssql\node_modules\tedious\lib\connection.js:944:12)
at Timeout._onTimeout (...node_modules\mssql\node_modules\tedious\lib\connection.js:913:16)
at ontimeout (timers.js:482:11)
at tryOnTimeout (timers.js:317:5)
at Timer.listOnTimeout (timers.js:277:5)

Tulis versi MSSQL Server Anda. Sekarang, SQLNCLI11 digantikan oleh MSOLEDBSQL untuk contoh MSSQL2017.
https://blogs.msdn.microsoft.com/sqlnativeclient/2018/03/30/released-microsoft-ole-db-driver-for-sql-server/

mendapat kesalahan yang sama saat menggunakan kode yang disalin dari contoh resmi Microsoft: https://www.microsoft.com/en-us/sql-server/developer-get-started/node/windows/step/2.html

Akhirnya, saya memecahkan kesalahan ini dengan mengaktifkan protokol TCP/IP di "Sql Server Configuration Manager"->"SQL Server Network Configuration"->" Protocols for"->"TCP/IP"

C:\Users\zpc\Desktop\SqlServerSample>node connect.js { ConnectionError: Failed to connect to localhost:1433 - Could not connect (sequence) at ConnectionError (C:\Users\zpc\Desktop\SqlServerSample\node_modules\tedious\lib\errors.js:13:12) at Connection.socketError (C:\Users\zpc\Desktop\SqlServerSample\node_modules\tedious\lib\connection.js:1183:28) at Connector.execute (C:\Users\zpc\Desktop\SqlServerSample\node_modules\tedious\lib\connection.js:1022:21) at SequentialConnectionStrategy.connect (C:\Users\zpc\Desktop\SqlServerSample\node_modules\tedious\lib\connector.js:69:7) at Socket.onError (C:\Users\zpc\Desktop\SqlServerSample\node_modules\tedious\lib\connector.js:84:12) at Socket.emit (events.js:189:13) at emitErrorNT (internal/streams/destroy.js:82:8) at emitErrorAndCloseNT (internal/streams/destroy.js:50:3) at process._tickCallback (internal/process/next_tick.js:63:19) message: 'Failed to connect to localhost:1433 - Could not connect (sequence)', code: 'ESOCKET' }

mendapat kesalahan yang sama saat menggunakan kode yang disalin dari contoh resmi Microsoft: https://www.microsoft.com/en-us/sql-server/developer-get-started/node/windows/step/2.html

Akhirnya, saya memecahkan kesalahan ini dengan mengaktifkan protokol TCP/IP di "Sql Server Configuration Manager"->"SQL Server Network Configuration"->" Protokol untuk "->"TCP/IP"

C:\Users\zpc\Desktop\SqlServerSample>node connect.js { ConnectionError: Failed to connect to localhost:1433 - Could not connect (sequence) at ConnectionError (C:\Users\zpc\Desktop\SqlServerSample\node_modules\tedious\lib\errors.js:13:12) at Connection.socketError (C:\Users\zpc\Desktop\SqlServerSample\node_modules\tedious\lib\connection.js:1183:28) at Connector.execute (C:\Users\zpc\Desktop\SqlServerSample\node_modules\tedious\lib\connection.js:1022:21) at SequentialConnectionStrategy.connect (C:\Users\zpc\Desktop\SqlServerSample\node_modules\tedious\lib\connector.js:69:7) at Socket.onError (C:\Users\zpc\Desktop\SqlServerSample\node_modules\tedious\lib\connector.js:84:12) at Socket.emit (events.js:189:13) at emitErrorNT (internal/streams/destroy.js:82:8) at emitErrorAndCloseNT (internal/streams/destroy.js:50:3) at process._tickCallback (internal/process/next_tick.js:63:19) message: 'Failed to connect to localhost:1433 - Could not connect (sequence)', code: 'ESOCKET' }

Terima kasih! Saya mengalami masalah persis ini;)

Karena kami masih mengalami masalah ini dengan hampir semua layanan nodejs kami, kami melakukan beberapa tes tambahan.
Komentar di atas dengan perbaikan TCP/IP sudah diaktifkan di server sql kami.

Kami membuat layanan nodejs baru yang sama sekali tidak melakukan apa-apa. Itu tidak dipanggil oleh layanan lain, hanya berjalan di PM2.
Ini akan membuka kumpulan koneksi baru ketika dimulai dan hanya duduk di sana.

Kami mendapat 3 kesalahan dalam 5 hari, terjadi secara acak:
"ConnectionError: Gagal terhubung ke sql.tilroy. internal: 1433 - Tidak dapat terhubung (urutan)".

Ini kodenya:

`
konfigurasi const = {
pengguna: Config.sql.sqluser,
kata sandi: Config.sql.sqlpassword,
server: Config.sql.sqlhost,
database: Config.sql.sqldatabase,
port: Config.sql.sqlport,
waktu koneksi habis: 3000,
requestTimeout: 3000,
kolam: {
maks: 100,
min: 1, //jangan tutup semua koneksi.
idleTimeoutMillis: 1000,
evictionRunIntervalMillis: 1500000
}
};

const sqlConnection = new SQL.ConnectionPool(config, function (err) {
    Log.debug("got sql connection");
    if(err){
        Log.error(err);
        process.exit(1);
    }
});

sqlConnection.on('error', err => {
    Log.error(`Connection err : ${err}`);
    process.exit(1);
});

`

Kami memutakhirkan server SQL kami tetapi itu tidak membantu. Memperbarui semua paket kami tetapi masih mendapatkan kesalahan ini.
Ada lagi yang bisa kita coba? Kami lebih suka tidak membuang mssql yang membosankan karena kami menggunakannya di banyak layanan.

@TimTilroy apakah Anda menggunakan tedious untuk menangani kumpulan koneksi Anda atau kumpulan koneksi yang membosankan ? Jika Anda menggunakan proyek yang membosankan, mungkin Anda dapat mencoba yang membosankan-koneksi-kolam dan melihat apakah itu membantu.

Hai IanChokS,

Kami tidak menggunakan paket pool koneksi yang membosankan, tetapi connectionPool default dari paket mssql (menggunakannya membosankan saya percaya).

Namun kami telah memperbarui paket mssql ke versi 5.1 sekarang dan tampaknya stabil, kami tidak mendapatkan lagi kesalahan koneksi pada layanan pengujian kami. Salah satu perubahannya adalah sebagai berikut:

Memindahkan pustaka kumpulan dari kumpulan simpul ke tarn.js

Jadi mungkin itu memperbaiki masalah kita.

Kami juga mengatur koneksi min pool ke 0, tidak tahu apakah itu bisa berpengaruh.

@MarioPerezEsteso jika Anda mengalami masalah saat menyambung ke server, Anda dapat mencoba memastikan bahwa TCP IP diaktifkan dan Anda memiliki nomor port yang benar dalam konfigurasi Anda untuk memeriksa apakah server dapat dijangkau.

@regevbr , @Praveen335 Jika Anda menggunakan penggabungan koneksi, Anda dapat mencoba dan menggunakan perpustakaan tarn.js alih-alih kumpulan simpul seperti yang dilakukan TimTilroy untuk melihat apakah itu memperbaiki masalah koneksi Anda. Jika tidak, mungkin coba perbarui ke mssql terbaru (v5.1).

Pembaruan: kami telah menerapkan versi baru mssql (5.1.0) ke semua layanan sql kami, memperbarui koneksi kumpulan min ke 0 dan sepertinya kesalahan koneksi berhenti sejak penerapan kami.

Saya pikir masalahnya hanya karena Anda menggunakan " / " alih-alih " \ " dalam nama atau hal seperti itu

@ Praveen335 Sudahkah Anda mencoba memutakhirkan ke versi baru mssql (5.1.0) untuk melihat apakah itu menyelesaikan masalah Anda? Jika tidak, silakan buka kembali masalah ini.

Saya menggunakan versi:
mssql: "^6.2.0",
membosankan: "^8.3.0"

Saya telah mengaktifkan TCP/IP di manajer konfigurasi. Juga semua layanan sql saya berjalan. namun saya mendapatkan kesalahan berikut:

C:\Nodejs\node-sql-conn\Database>node connect.js
membosankan usang Dalam versi utama berikutnya dari tedious , membuat instance Connection baru tidak akan lagi membuat koneksi ke server secara otomatis. Silakan gunakan fungsi pembantu connect atau panggil metode .connect pada objek Connection baru dibuat untuk membungkam pesan ini. internal\process\task_queues.js:79:11
Koneksi gagal

C:\Nodejs\node-sql-conn\Databaseconnect.js:26
melempar kesalahan;
^
ConnectionError: Gagal terhubung ke localhost:undefined - Tidak dapat memanggil tulis setelah aliran dihancurkan
di ConnectionError (C:\Nodejs\node-sql-conn\node_modulestedious\lib\errors.js:13:12)
di Connection.socketError (C:\Nodejs\node-sql-conn\node_modulestedious\libconnection.js:1308:56)
di Soket.(C:\Nodejs\node-sql-conn\node_modulestedious\libconnection.js:1143:14)
di Socket.emit (events.js:327:22)
di errorOrDestroy (internal/streams/destroy.js:108:12)
di onwriteError (_stream_writable.js:418:5)
di onwrite (_stream_writable.js:445:5)
di doWrite (_stream_writable.js:399:11)
di writeOrBuffer (_stream_writable.js:387:5)
di Socket.Writable.write (_stream_writable.js:318:11) {
kode: 'ESOCKET'
}

Ini Kode saya:
var Koneksi = membutuhkan('membosankan').Koneksi;
konfigurasi var = {
server: 'localhost',
autentikasi: {
ketik: 'default',
pilihan: {
nama pengguna: 'sa',
kata sandi: '####',
pelabuhan: 1433
}
},
pilihan: {
basis data: 'Perusahaan',
nama contoh: 'MSSQLSERVER',
rowCollectionOnDone: benar,
useColumnNames: salah,
trustServerCertificate: salah
}
};
var koneksi = Koneksi baru(config);
koneksi.on('koneksi',fungsi(err){
jika(salah){
console.log('Koneksi Gagal');
melempar kesalahan;
}
kalau tidak{
console.log('Terhubung');
}
});
module.exports = koneksi;

mendapat kesalahan yang sama saat menggunakan kode yang disalin dari contoh resmi Microsoft: https://www.microsoft.com/en-us/sql-server/developer-get-started/node/windows/step/2.html

Akhirnya, saya memecahkan kesalahan ini dengan mengaktifkan protokol TCP/IP di "Sql Server Configuration Manager"->"SQL Server Network Configuration"->" Protokol untuk "->"TCP/IP"
SQLServerConfigurationManager

C:\Users\zpc\Desktop\SqlServerSample>node connect.js { ConnectionError: Failed to connect to localhost:1433 - Could not connect (sequence) at ConnectionError (C:\Users\zpc\Desktop\SqlServerSample\node_modules\tedious\lib\errors.js:13:12) at Connection.socketError (C:\Users\zpc\Desktop\SqlServerSample\node_modules\tedious\lib\connection.js:1183:28) at Connector.execute (C:\Users\zpc\Desktop\SqlServerSample\node_modules\tedious\lib\connection.js:1022:21) at SequentialConnectionStrategy.connect (C:\Users\zpc\Desktop\SqlServerSample\node_modules\tedious\lib\connector.js:69:7) at Socket.onError (C:\Users\zpc\Desktop\SqlServerSample\node_modules\tedious\lib\connector.js:84:12) at Socket.emit (events.js:189:13) at emitErrorNT (internal/streams/destroy.js:82:8) at emitErrorAndCloseNT (internal/streams/destroy.js:50:3) at process._tickCallback (internal/process/next_tick.js:63:19) message: 'Failed to connect to localhost:1433 - Could not connect (sequence)', code: 'ESOCKET' }

Yang ini bekerja untuk saya. Terima kasih telah memberi saya solusi.

Saya juga bereksperimen dengan kesalahan koneksi ESOCKET ini, dan masalahnya tidak terkait dengan TCP/IP karena aplikasi terhubung dari AWS EC2 ke AS RDS dan berfungsi hampir sepanjang waktu.

AKHIRNYA saya memecahkan kesalahan. Skrip yang saya gunakan setiap kali saya meminta koneksi baru:

function getConnection () {
    // console.log("config")
    // console.log(config)
    return new Promise(function (resolve, reject) {
        const pool = new sql.ConnectionPool(getConfig())
        // console.log("Getting connection...");
        pool.connect()
        .then((cn) => {
            // console.log("connection got");
            resolve(cn);
        })
        .catch((e) => {
            // console.log("connection not got");
            reject(e);
        });
    })
}

Script yang memecahkan masalah:

function runCommand(cmdText) {
    return new Promise((resolve, reject) => {
        pool2Connect
        .then((pool) => {
            // pool.request() // or: new sql.Request(pool2)
            // .input('input_parameter', sql.Int, 10)
            // .output('output_parameter', sql.VarChar(50))
            // .execute('procedure_name', (err, result) => {
            //     // ... error checks
            //     console.dir(result)
            // })
            pool.request() // or: new sql.Request(pool2)
            .query(cmdText)
            .then((rows) => {
                return resolve(rows.recordset);
            })
            .catch((e) => {
                return reject(e);
            });
        })
        .catch((err) => {
            return reject(err);
        });
    });
}

di mana pool2Connect perlu didefinisikan pada awalnya, saat memulai skrip:

    pool2 = new sql.ConnectionPool(config);
    pool2Connect = pool2.connect();
    pool2.on('error', err => {
        console.log(err);
    });

Semoga membantu

Apakah halaman ini membantu?
0 / 5 - 0 peringkat