Re: [閒聊] 決定來挑戰:自己寫BBS

作者: LaPass (LaPass)   2015-07-24 11:14:43
推 abcdefghi: telnet要一直佔著tcp connection不放,真的不適合繼續用 07/21 11:13
推 abcdefghi: http是stateless喜歡佔住tcp或是一次就斷線都可以,serv 07/22 05:02
→ abcdefghi: er或client可以根據自己的情況選擇最適合的方式,但tel 07/22 05:03
→ abcdefghi: net就只能永遠佔住tcp來保持自己的state, ssh也是有同 07/22 05:05
→ abcdefghi: 樣的缺點. 07/22 05:05
推 abcdefghi: tcp有太多情況會斷線,NAT被reset,手機從3G切到wifi,電 07/23 07:13
→ abcdefghi: 腦進standby. 如果系統的連線數只有幾百個,那tcp確 07/23 07:18
→ abcdefghi: 實不怕被佔用,如果是幾萬人的同時在線上,那差異就很大 07/23 07:19
→ abcdefghi: 了,每個tcp連線OS都要花幾KB的記憶體來維持,一堆沒有在 07/23 07:22
→ abcdefghi: 動作的連線等於就是白白浪費記憶體,幫你找了別人的實驗 07/23 07:23
→ abcdefghi: http://0rz.tw/sLMr6 , websocket是不是爛東西要看使 07/23 07:24
→ abcdefghi: 用的地方,而且websocket並沒有要取代http,而是補足過去 07/23 07:30
→ abcdefghi: http在雙向傳送資料沒有效率的缺點,在一般的情況下,一 07/23 07:33
→ abcdefghi: 樣是用http. 07/23 07:49
在命令列打下面這三行指令,再多空一行
把中間的網站改成隨便一個網站
telnet xxxxxxx.com 80
GET / HTTP/1.1
Host: xxxxxxx.com
接著,你應該會看到一堆 html
其他像是 smtp 或是其他一些奇奇怪怪的通訊協議
都可以靠telnet搞定
當然啦,如果定義的傳輸資料是二進制的狀況,那就另當別論了。
但據我所知,大多數的通訊協議都是靠鍵盤能打出來的。
我覺得那些反對的理由以及反對的行為很奇怪
講到 http ,當然不只是連線的狀態以及斷線連線記憶體之類的而已
他還包含了 html css js 之類的解釋以及把html圖形化等等
所以 http 通訊協議是「很肥」的東西
只是因為http這種通訊協議太普及,瀏覽器、server軟體都唾手可得
所以會有http很方便的錯覺
如果有不服的話,可以試著去實作 http 通訊協議以及瀏覽器看看
server端還好
但client端在不用現成的libary的狀況下,應該會寫到死掉
尤其是解釋html然後圖形化的部份
當然有人可能會講http也可以傳json或是xml、圖片等等
但問題是,絕大多數的狀況都是html吧?
但telnet不一樣,telnet很單純的是就是把字元顯示在螢幕上
把打的字傳到server
頂多加上上色而已
那個很適合拿來當作寫網路程式的新手或是初學者的練習用作業
但簡單或複雜又怎麼樣呢?
如果真的寫過 socket 的server、client
就會發現最底層也不過就是那個樣子
至於最上面寫的,哪個好哪個不好的理由,其實都很虛幻
比起那些,在自己開發的軟體間的連線下,我比較喜歡自定通訊協議
那麼愛斷線就斷線
要維持住連線就維持住連線
要stateless就stateless
要效率也可以很有效率
還有,以自己的經驗,在多數狀況下,我會希望client端保持連線
而不是每傳輸一次資料就斷開
作者: abcdefghi   2014-07-21 11:13:00
telnet要一直佔著tcp connection不放,真的不適合繼續用http是stateless喜歡佔住tcp或是一次就斷線都可以,server或client可以根據自己的情況選擇最適合的方式,但telnet就只能永遠佔住tcp來保持自己的state, ssh也是有同樣的缺點.tcp有太多情況會斷線,NAT被reset,手機從3G切到wifi,電腦進standby. 如果系統的連線數只有幾百個,那tcp確實不怕被佔用,如果是幾萬人的同時在線上,那差異就很大了,每個tcp連線OS都要花幾KB的記憶體來維持,一堆沒有在動作的連線等於就是白白浪費記憶體,幫你找了別人的實驗http://0rz.tw/sLMr6 , websocket是不是爛東西要看使用的地方,而且websocket並沒有要取代http,而是補足過去http在雙向傳送資料沒有效率的缺點,在一般的情況下,一樣是用http.
作者: ofy (毆飛)   2015-07-24 13:23:00
如果我學的沒出錯,保持連線遠比建立連線要輕鬆容易當然可以做到混合是最好的,尤其是現在頻寬跟過去相比大上許多為了做到stateless,每次連線所送的session在現今網路可被忽略HTTP/2 新特性 HTTP pipelining表示:發展倒退中???阿~要加上HTTP persistent connection然後是multiplexing
作者: tjjh89017 (伊達政宗)   2015-07-24 16:13:00
小弟看過jserv大大實作的簡易http server真的覺得http超級麻煩Orz
作者: filiaslayers (司馬雲)   2015-07-24 16:57:00
http server端應該比client簡單很多client端感覺像就在做編譯器啊...
作者: abcdefghi   2015-07-24 20:55:00
我講的telnet是指 rfc 854, 不是 telnet 這個程式我講的 http 是指 rfc2616, 不是指web browser和server手寫簡單的http server讓常見的browser連線,或是手寫簡單的browser去連常見的網站我也做過, 事情就事論事就可以, 不需要執疑對方的經驗. 自定protocol是不錯的選擇,但是最好先對既有作法的優缺點都分析清楚後再定比較好.花了5分鐘左右google並測試一個簡單的http server, 全部 187 行 c code, http://0rz.tw/CYzsE
作者: EdwardGJLee (LGJ)   2015-07-25 06:15:00
用c寫沒什麼了不起,用 ps 寫才厲害:http://www.pugo.org:8080/行數差不多。XD
作者: lsc36 (lsc36)   2015-07-25 18:49:00
寫RESTful不好嗎 別自己造輪子...
作者: EdwardGJLee (LGJ)   2015-07-26 14:19:00
學習、練習的時候,自己造輪子是必要的。實戰另議!當大家都被現成的框架框住時,就代表不會進步了!

Links booklink

Contact Us: admin [ a t ] ucptt.com