Встраивание ServerSockets в несерверные приложения - PullRequest
2 голосов
/ 20 января 2012

Я пытался разработать встроенный веб-сервер в приложении, которое я создал. По сути, у нас есть основной процесс, который создает простой веб-сервер (с использованием ServerSocket), а затем основной процесс (теоретически) будет работать.

Main(){
    doingStuff();
    WebServer server = new WebServer();
    server.run();
    doingMoreStuff();
}

public class WebServer implements Runnable{
    ServerSocket inbound;

    //constructor
    WebServer(){
        inbound = new ServerSocket(9687);
    }

    public void Run(){
        Socket client;

        while(true){
            client = inbound.accept();
            SomeClass threadedClassThatHandlesClientMessage = new SomeClass(client);
            someclass.run();
        }
    }
}

В предыдущем псевдо-коде я знаю, что поток с блоками вызова ServerSocket accept () прекращает работу потока класса WebServer, а также основного потока. Есть ли что-то, чего мне не хватает?

Я знаю, что могу создать две программы, которые могут работать в тандеме как отдельные процессы, но я надеялся избежать любого IPC и использовать один процесс с обработкой данных в одном потоке и общим сокетом сервера, получающим данные в отдельная тема. Хотя я все еще новичок во всем этом, я совершенно уверен, что это одна из тех простых вещей, которые я упустил из виду, но я был бы очень признателен за любую помощь, которую вы могли бы оказать.

1 Ответ

2 голосов
/ 20 января 2012

Вызов .run() на Runnable не заставляет его работать в новом потоке, он запускает его в текущем потоке.

Вы хотели сделать new Thread (server).start ()?

...