Java Socket o SocketChannel

1

Sto progettando un server per un archivio di file remoto in Java e sto cercando di decidere se utilizzare java.nio.SocketChannels asincrono o il modello di blocco precedente con Sockets. Che tipo di fattori dovrei prendere in considerazione quando scelgo tra queste due architetture server e quali tipi di attività sarebbero più adatte all'uno rispetto all'altro?

In particolare, mi chiedo come questi rispettivi approcci si confrontino come:

  1. il numero di client connessi scalati,
  2. aumenta la lunghezza della connessione client e
  3. la quantità di dati trasferiti aumenta.

Inoltre, ci sono altri fattori di cui dovrei essere a conoscenza che favorirebbero un approccio rispetto all'altro?

    
posta Matthew Loring 03.03.2015 - 23:21
fonte

1 risposta

1

Perché stai cercando di risolvere un problema già risolto? Ce ne sono già almeno due buoni:

Grizzly

Writing scalable server applications in the Java™ programming language has always been difficult. Before the advent of the Java New I/O API (NIO), thread management issues made it impossible for a server to scale to thousands of users. The Grizzly NIO framework has been designed to help developers to take advantage of the Java™ NIO API. Grizzly’s goal is to help developers to build scalable and robust servers using NIO as well as offering extended framework components: Web Framework (HTTP/S), WebSocket, Comet, and more!

Netty

Netty is a NIO client server framework which enables quick and easy development of network applications such as protocol servers and clients. It greatly simplifies and streamlines network programming such as TCP and UDP socket server.

'Quick and easy' doesn't mean that a resulting application will suffer from a maintainability or a performance issue. Netty has been designed carefully with the experiences earned from the implementation of a lot of protocols such as FTP, SMTP, HTTP, and various binary and text-based legacy protocols. As a result, Netty has succeeded to find a way to achieve ease of development, performance, stability, and flexibility without a compromise.

A me sembra che tu sia meno interessato a risolvere il problema tu stesso di quanto tu non abbia il problema da risolvere, così puoi avere il tuo archivio di file remoto. Personalmente, utilizzo Netty nella mia applicazione e funziona alla grande. Non reinventare la ruota: usa quella di qualcun altro.

    
risposta data 13.03.2015 - 16:57
fonte

Leggi altre domande sui tag