專案開發過程中遇到的問題

2021-09-22 02:24:24 字數 1543 閱讀 4934

問題分類:

1、邏輯問題:結構、處理流程的設計有問題,尤其在多執行緒操作同乙個物件時;

2、介面定義和使用問題:例如介面結構或返回情況改了,未及時編譯或更改其他模組的呼叫;

3、對接問題:對講問題不是你的問題,就是我的問題,需要聯查;

4、理解問題:對功能、邏輯流程或函式定義和使用的理解不清晰;

5、異常處理機制問題;

6、**細節問題:變數型別、返回值、引用、指標;

socket繫結(bind)本地埠失敗

問題描述:地標協議在啟用時,會主動向平台註冊,socket本地埠6600(可修改),當快速關閉使能再開啟時,概率性出現socket繫結本地埠失敗。

問題分析:bind 普遍遭遇的問題是試圖繫結乙個已經在使用的埠。 該陷阱是也許沒有活動的套接字存在,但仍然禁止繫結埠(bind 返回 eaddrinuse),它由 tcp 套接字狀態 time_wait 引起。該狀態在套接字關閉後約保留 2 到 4 分鐘。在 time_wait 狀態退出之後,套接字被刪除,該位址才能被重新繫結而不出問題。

解決方法:等待 time_wait 結束可能是令人惱火的一件事,特別是如果您正在開發乙個套接字伺服器,就需要停止伺服器來做一些改動,然後重啟。幸運的是,有方法可以避開 time_wait 狀態。可以給套接字應用 so_reuseaddr 套接字選項,以便埠可以馬上重用。通過sesockopt函式重置本地埠來解決該問題;

執行緒池、任務佇列阻塞問題

問題描述:有遠端操控協議為tcp短連線,通過客戶端操作裝置時,裝置會頻繁的建立執行緒、銷毀執行緒,後來將裝置端來請求就建立執行緒的機制,修改為執行緒池模式(固定建立4個執行緒,來處理請求)。執行緒池模型機制如下:

epoll監聽socket狀態

→ 裝置/服務端檢測socket可讀

→ 建立task丟進任務佇列

→ 若任務隊列為空則喚醒乙個等待執行緒(執行緒池執行緒通過條件變數阻塞)

邏輯上是來乙個任務,即喚醒乙個阻塞執行緒,任務即被取出,任務佇列又恢復成空佇列。根據任務佇列是否為空這個判斷條件來喚醒執行緒就要求有乙個前提是,來任務,任務被執行緒池取出處理後,下一次任務才會進來。當epoll監聽執行緒新增任務、喚醒乙個等待執行緒、但是該執行緒沒有及時取出任務、又有新的任務新增進來時(任務佇列非空),就是出現喚醒一次,但是任務佇列有兩個甚至多個任務,這就導致這些任務只能有這個被喚醒的執行緒處理,並且再有任務進來,也不會執行喚醒,直到該執行緒處理完所有任務(若不能及時處理完,就會導致連線異常)。

socket套接字關閉問題

問題描述:某協議為tcp短連線,執行一次資料互動即關閉socket套接字,在client執行close時,server端正常;在client不主動關閉時,server端的處理時,讀完套接字緩衝區所有資料,然後關閉套接字,readn函式封裝了recv讀取指定長度資料,要麼讀到指定資料,要麼套接字異常才返回。這就導致讀套接字緩衝區時,既不到指定資料,套接字又沒有被client關閉,陷在死迴圈裡,佔據乙個執行緒池執行緒。

問題分析:現使用的readn是本模組自己封裝的,沒有select超時機制,原有readn函式,通過select設定超時機制為2秒,超時套接字不能讀,則返回-1,不會陷入死迴圈;

開發過程中遇到的兼用問題

1.低版本瀏覽器不支援html5新增的標籤 方法 引入第三方庫html5shiv.js 2.ul標籤在ie瀏覽器中有margin,在firefox瀏覽器中有padding 方法 在設定css時,設定margin 0 padding 0 3.ie6下使用margin 0 auto 無法居中 方法 為父...

C 開發過程中,遇到問題

在c 中,值型別不能為空。根據定義,值型別有乙個值,甚至值型別的未初始化變數也必須有乙個值。這稱為該型別的預設值。這將導致在檢查變數是否未初始化時引發異常 point 提供有序的 x 座標和 y 座標整數對,該座標對在二維平面中定義乙個點。pen 定義用於繪製直線和曲線的物件。此類不能被繼承。cla...

iOS開發過程中遇到的小問題

1.xcode6.1建立繼承自nsobject類的資料模型,如果需要加關於ui的屬性時需要加入uikit的標頭檔案。3.xocde6 官方的小bug,用storyboard建立的工程在4寸屏上執行時會出現上下黑條的現象,此時需要加乙個啟 方可解決此問題。4.設定view的偏移量 self.view....