簡體   English   中英

如何在TCP套接字連接會話中保存數據?

[英]How to save data in TCP socket connection session?

我想用Java編寫一個服務器,它將接受來自許多設備的信息並將信息存儲在數據庫中。 設備將繼續發送數據包。 第一個數據包將包含唯一的deviceId,此后僅包含與設備相關的數據。 我想與deviceId一起保存數據。 到現在為止,我可以開發一個可以為許多客戶端提供服務的多線程服務器。 但是,當我獲取數據時,我要么松散了deviceId要么得到了錯誤的deviceId。 有人可以幫忙嗎?

提前致謝。

Java不是我最好的編碼領域,但我希望這些想法會有所幫助。

可以使用休眠或其他OR-Mappe完成數據庫訪問,因此您可以像處理對象一樣操作數據庫。 對於數據包中的信息,您可以在成功連接到服務器后發送信息,例如:

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

然后,在接收線程中,您可以檢查傳入消息的特定類別並進行相應處理,例如將其存儲在數據庫中或類似的內容。 對於錯誤的設備ID,您必須在獲取數據包時檢查是否處於正確的線程中

如果要開發無狀態協議,則必須向每個設備(例如HTTP會話)發送ID,並且設備必須與服務器提供的SessionID連接。

如果使用每個連接一個線程的模式,則可以將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);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM