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