Komunikasi tercepat yang mungkin.
Ini adalah versi 7.2 dari paket Netcom. Dalam versi ini, paket Netcom sekarang multi-platform! Anda dapat mengkompilasi aplikasi Anda di bawah semua platform di firemonkey!
Komponen ini adalah implementasi komunikasi soket tercepat yang mungkin, dalam bahasa apa pun; Ini adalah kode yang sangat dioptimalkan pada soket TCP/IP. Lupakan menggunakan utas per koneksi: Dengan suite ini Anda dapat memiliki banyak koneksi bersamaan ke server Anda sesuka Anda. Utas digunakan per permintaan dan bukan per koneksi, dan dipelihara di kelas benturan utas yang sangat cepat.
Implementasi dimulai dengan tnctcpserver dan tnctcpclient yang mengimplementasikan komunikasi soket dasar. Anda dapat menggunakan TNCTCPCLIENT dan TNCTCPSERVER jika semua yang Anda inginkan adalah mengimplementasikan Comm Socket Standard (tetapi sangat cepat).
Di atas soket TCP/IP, protokol ringan diimplementasikan untuk dapat mengemas dan membongkar buffer (TCP/IP sederhana sedang streaming dan tidak memiliki gagasan tentang buffer yang terdefinisi dengan baik). Himpunan komponen yang menerapkan fungsi ini adalah TNCServerSource dan TNCClientSource. Kedua komponen ini menerapkan ExecCommand (ACMD, ADATA) yang memicu acara OnHandleCommand di sisi lain (klien dapat mengeksekusi ke server, atau server dapat mengeksekusi klien mana pun). ExecCommand dapat memblokir atau tidak memblokir (async) tergantung pada bagaimana Anda mengatur parameter ArequiresResult. Jika Anda menggunakan perilaku pemblokiran, komponen masih menangani permintaan yang masuk dari rekannya. Misalnya, sumber klien dapat menunggu di ExecCommand ke server, tetapi sambil menunggu itu dapat melayani permintaan ExecCommand dari server!
Senario Sederhana: Server:
- You put a TncServerSource on your form.
If you want you can change the port it is listening to via the
Port property.
- You implement an OnHandleCommand event handler and,
depending on aCmd parameter (integer), you respond the result of
the command via setting the Result of the OnHandleCommand to
anything you like (TBytes). If an exception is raised while in
HandleCommand, it is trapped, packed, transfered accross to the
calling peer, and raised at the peer's issued ExecCommand.
This way exceptions can be handled as if they were raised locally.
- You set the Active property to true. Your server is ready.
Klien:
- You put a TncClientSource on your form.
You can set Host and Port to whatever you want.
- You set Active property to true.
Your client is now connected to the server.
- You call ExecCommand (on your TncClientSource), with any
command number and data that you like. This will send your
command and data over to the server, call its OnHandleCommand,
pack the response, and return it as a result to your ExecCommand.
- ExecCommand is blocking (if aRequiresResult parameter is set to true),
but only for the current command issued.
The TncClientSource's OnHandleCommand still executes, so,
while waiting for a command to return, your client socket may be
processing requests from your server (a server can also
ExecCommand to a client).
- If you have forgotten to set Active to true and call ExecCommand,
the TncClientSource will first try to connect, so you can ommit
setting this property. It will also try to connect if it knows
it has been disconnected (and the Reconnect property is set to true).
Komponen ini menjanjikan kecepatan yang tak tertandingi dan itu tidak hanya dengan kata -kata:
Tes waktu sederhana dengan demo NetComVSindy memberikan hasil berikut:
Dimulai dengan unit dasar, ncsockets.pas, Anda akan melihat bahwa implementasi tidak menderita kode kendur, itu agak langsung. Konvensi panggilan inline telah digunakan di mana pun dianggap tepat. Fungsi inti telah diuji dan dioptimalkan dengan memantau kinerja melalui waktu loop besar dan inspeksi perakitan untuk memeras setiap bit kinerja terakhir.
Perbedaan terbesar meskipun dalam penguatan kecepatan adalah karena arsitektur. Tidak seperti kebanyakan soket khas:
Set soket ini tidak memicu atau menggunakan utas per koneksi.
Ini berarti Anda dapat memiliki koneksi langsung sebanyak yang Anda suka dan Anda tidak akan melihat perbedaan dalam kinerja! Kumpulan utas hanya menunggu permintaan apa pun; Jika utas akan dibuat per permintaan atau per koneksi, kecepatan akan sangat menderita, karena membuat utas cukup berat waktu. Jika jumlah permintaan per detik tidak dapat ditangani oleh kumpulan utas, kumpulan utas tumbuh hingga ukuran maksimum yang ditentukan, dan jika masih tidak dapat mengatasinya, klien hanya menunggu sampai server mendapatkan utas siap untuk memproses permintaannya.
Perhatian khusus telah diberikan pada masalah koneksi juga. Misalnya, pemutusan segera diambil, dan jika garis sangat buruk sehingga pemutusan tidak dapat diambil, ia menangani ini dengan paket Keep Alive yang dengannya ia mengetahui status yang sebenarnya. Ada properti yang terhubung kembali dan properti Keepalive. Ketika klien terputus, untuk alasan apa pun, ia mencoba untuk terhubung kembali secara transparan dan tanpa mempengaruhi kinerja aplikasi utama. Dengan cara ini Anda tidak perlu khawatir menjaga klien Anda tetap terhubung.
Kompresi dan enkripsi juga standar dengan komponen -komponen ini tanpa diperlukan perpustakaan tambahan. Ofcourse Anda dapat menggunakan kompresi atau enkripsi Anda sendiri jika Anda mau, tetapi agak berguna untuk memiliki hanya properti yang dapat Anda atur pada komponen.
Komponen ini juga dapat menangani data sampah yang dilemparkan pada mereka, mereka telah digunakan dan diuji dalam proyek-proyek besar di seluruh negeri di mana segala macam serangan dapat dilihat.
Upaya yang harus dilakukan oleh seorang programmer untuk menggunakan komponen -komponen ini minimal dibandingkan dengan kerangka kerja lainnya. Silakan merujuk ke demo untuk pemahaman yang lebih baik tentang cara menggunakan komponen -komponen ini.
Ditulis oleh demo Bill Anastasios. Terima kasih khusus kepada Daniel Mauric, Tommi Prami, Roland Bengtsson untuk pengujian dan saran yang luas. Terima kasih banyak!
Vasdemos [at] yahoo [dot] co [dot] uk
** Aturan Delphi **