처음부터 메시징 서버 구축. (자바)
자바,
서버소켓,
ClientSocket.
최신 앱 서버가 단일 인스턴스로 수백만 개의 연결로 확장되는 방법을 이해할 수 없었을 때 그것을 구축하려는 동기가 생겼습니다. 그래서 작업을 시작했습니다. 제가 건축을 시작할 때 인터넷에서 많은 도움을 얻을 수 없었기 때문에 이 문서를 작성합니다...
코드에서 바로 점프.
이것은 ConcurrentServer가 실행을 시작할 기본 클래스입니다.
class ConcurrentServer{
public static void main(String[] arg) throws IOException, InterruptedException
{
int port;
if(arg.length == 0){
port = 8080;
}
else{
port = Integer.parseInt(arg[0]);
}
new ConcurrentServer().start(port);
}
}
잠시 기다리세요....
여기
List<User> clients
를 기억하십시오. 중요한 역할을 합니다.public class Shared {
public static List<User> clients = new ArrayList<>();
public static int count= 0;
private Shared(){
}
}
새 사용자가 서버에 연결되면 연결 개체가
Shared
클래스의 클라이언트 목록으로 푸시됩니다(아래 참조).아래의
User
클래스는 ClientSocket
에서 확장됩니다.public ConcurrentServer{
public static void main.....
.
.
.
.
public void start(int port) throws IOException, InterruptedException{
try(ServerSocket server = new ServerSocket(port)){
Thread channelReaderThread = new Thread(channelReader);
channelReaderThread.start();
while(ALWAYS_RUNNING){
User client = new User(server.accept());
Shared.clients.add(client);
}
}
}
}
다음으로 언제든지 팝업될 수 있는 사용자 메시지를 읽습니다.
private void process()
{
int maxSize = Shared.clients.size();
for(int i = 0 ; i < maxSize ; i++)
{
User user = Shared.clients.get(i);
queryClient(user, i);
}
}
private void queryClient(User user,int index)
{
InputStream inputStream = user.getInputStream();
if( inputStream.available() <= 0 )
{
return;
}
ConnectedBy connection = user.getConnectionType();
connection.handle(user);
}
이 사람
Shared.clients
을 기억하세요. 연결된 사용자를 메인 스레드로 푸시한 배열입니다.위의
process
메서드는 100ms마다 트리거 실행됩니다. Java는 inputStream.available()이라는 메서드를 제공합니다. 사용자가 메시지를 보내면 inputStream.available()
> 0이 됩니다. 이제 inputStream에서 메시지를 읽을 수 있습니다.메시지를 읽을 수 있고 이미 모든 clientConnections
Shared.clients
가 있으므로 메시지를 반복하고 들어오는 메시지를 포함된 모든 클라이언트에 보낼 수 있습니다.따라서 작동하는 메시징 응용 프로그램이 있습니다.
수천 개의 병렬 연결로 테스트되었으며 대부분 메시지를 전달합니다.
그러나 주의.
메시지가 삭제되는 경우가 있습니다. 이 메시지가 삭제되는 이유를 아직 알 수 없습니다. 그래서 어떤 도움이라도 대단히 감사하겠습니다.
그것을 이해하거나 이해하지 못한 사람은 댓글을 달아주세요. 연락하고 싶습니다.
소스 코드. https://github.com/SrikanthYashaswi/messenger
Reference
이 문제에 관하여(처음부터 메시징 서버 구축. (자바)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/justhere/building-a-messaging-server-from-scratch-java-30of텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)