Как сохранить данные в сеансе соединения TCP-сокета? - PullRequest
0 голосов
/ 18 октября 2010

Я хочу закодировать сервер в Java, который будет принимать информацию со многих устройств и сохранять информацию в базе данных.Устройства будут продолжать отправлять пакеты.Первый пакет будет содержать уникальный идентификатор устройства, а после этого только данные, относящиеся к устройству.Я хочу сохранить данные вместе с идентификатором устройства.До сих пор я мог разработать многопоточный сервер, который может обслуживать множество клиентов.Но когда я получаю данные, я либо теряю deviceId, либо получаю неправильный deviceId.Кто-нибудь может помочь?

Заранее спасибо.

Ответы [ 3 ]

0 голосов
/ 18 октября 2010

Если вы хотите разработать протокол без сохранения состояния, вы должны отправить идентификатор на каждое устройство, например, HTTP-сеанс, и устройство должно подключиться с идентификатором SessionID, данным сервером.

0 голосов
/ 18 октября 2010

Если вы используете шаблон «один поток на соединение», вы можете оставить deviceId в качестве поля объектов потока и передать его каждому вызываемому методу, или вы можете сохранить deviceid в ThreadLocal:

private static ThreadLocal<String> deviceId = new ThreadLocal<String>();

public static String getDeviceId() {
    return deviceId.get();
}

public static void setDeviceId(String newValue) {
    deviceId.set(newValue);
}
0 голосов
/ 18 октября 2010

Java - не самая лучшая область кодирования, но я надеюсь, что эти идеи помогут.

Доступ к базе данных может быть сделан с помощью hibernate или другого OR-Mappe, так что вы можете манипулировать вашей базой данных как объектом. Для информации в пакетах вы можете отправить информацию, когда вы успешно подключились к серверу, как:

public void connect(string servername)
{
  ConnectionMethod();
  if(connected)
  {
    SendObject(/*Enter information here*/);
  }
}

Затем в получающем потоке вы можете проверить определенный класс входящего сообщения и обработать его соответствующим образом, например, сохранить его в базе данных или что-то в этом роде. Для неправильного идентификатора устройства вы должны проверить, если вы находитесь в правильном потоке, когда вы получаете пакеты

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...