[閒聊] 下班後還在想這問題

看板Soft_Job作者 (男生一枚)時間12年前 (2011/11/26 00:44), 編輯推噓2(201)
留言3則, 2人參與, 最新討論串1/1
一直覺得寫程式的工作...工時真的很長。 軟體工作幹了五年之後、這種感覺愈來愈深, 所以忍不住就想在睡前哈拉一下。 話說今天回家後、腦子裡還一直在run程式問 題,後來想到一個解法,應該可行,腦子才乖 乖停下來了。 都說到這兒了~~也許有人會好奇我在想什麼, ok~~趁著睡前就敲一下吧,也許大家會有不同 的想法,也可以參考一下我的想法。 事情是這樣的~~~ 目前在研發的一個產品,姑且稱他為1126好了 ,因為現在剛好是11/26號。 1126是一台要跟windows系統用socket溝通的 東東,它本身也可以切換到Software AP模式, 有Software AP 模式很重要,這表示即便處於 沒有無線AP的環境中,1126也可以和windows溝 通,並展現他的功用。 在一般提供無線網路的環境中本來是使用multicast 的方式溝通的,會用multicast是因為設想同時有很 多台1126會跟windows系統雙向溝通,所以就用了 multicast的方式,反正就是以ip來辨識身份達到溝 通的目的,基本上沒啥難度。 可是切換到software AP模式候問題就出現了~~~ 哈哈~~有些人一定已經想到了~~那就是1126們沒法 做multicast,這下子雙向溝通變成單向溝通,這可 是大大的不行,無法溝通就無法工作了啊。 所以後來就變成windows-->1126 用multicast 1126---> 使用一般的udp 所以就變成windows端要定時發廣播,有收廣播的1126 們就可以收到windows端的IP,然後使用udp的方式將 自己要說的話告訴windows。 可是我又遇到了一個問題,也就是我想了很久的問題 就是當windows 端決定停止工作的時候,我希望windows 端可以先告訴1126們停止工作,1126停止後再發訊息通 知windows端、讓windows知道自己收工了,然後windows 收到後再收工。 基本上沒啥問題,可是問題是,windows端約5秒才會發送 一次訊息,這五秒其實就是recvfrom的timeout時間造成 的,所以可以想見,在1126有丟出訊息給windows的時候, windows這邊的socket是可以立刻回應的,因為recvfrom 一收到訊息會立刻往下做,於是sendto就可以發訊息了, 可是今天是windows要主動通知1126收工的情況下就變成 可能會有 約0秒以上5秒以下的等候時間才能把收工的訊息 發給1126,最 倒楣的情況是要等將近5秒鐘才可以送出收 工的訊息,這樣太慢了,使用起來卡卡的。 也許有人會說,把timeout時間設短一點不就好了?這樣 當然可以工作,問題是...也太秏資源了吧!這樣寫我會想揍 自己一頓的。 所以回家後想到的辦法是,要收工的時候就把原本的multicast sendSocket直接close掉,只留下recvSocket,然後再重新建立 一個sendSocket立刻把要收工訊息廣播出去,這樣一來應該可以 立刻結束,不用等待才對。 至於為什麼我要把原來的sendSocket close掉,這是因為廣播位 址和port是早已決定的,我發現我不能在同一台windows上同時建 立二個相同multicast address 和port的sendSocket,所以才想 到這樣做。 其實我跟socket很不熟,但最近七個工作天我剛好一定要用到它, 所以臨時惡補了一下,就給它寫下去了。 大家覺得這樣寫如何?或者有更好的做法嗎? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 111.251.142.58

11/26 01:32, , 1F
google一下select跟reuseport看有沒有幫助
11/26 01:32, 1F

11/26 01:34, , 2F
建議找本socket API的書K一下...
11/26 01:34, 2F

11/26 02:14, , 3F
這問題好像不需要想很久...原PO太執著啦 -_-
11/26 02:14, 3F
文章代碼(AID): #1EpyOBDc (Soft_Job)