日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

erlang套接字

發布時間:2023/12/10 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 erlang套接字 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Erlang的套接字可以有三種打開模式:主動(active)、單次主動(active once)或被動(passive)。
這是通過在gen_tcp:connect(Address, Port, Options)或gen_tcp:listen(Port, Options)
的Options參數里加入{active, true | false | once}選項實現的。

如果指定{active, true}就會創建一個主動套接字,指定{active, false}則是被動套接
字。{active, once}創建的套接字只會主動接收一個消息,接收完之后必須重新啟用才能接收
下一個消息。

一、主動型

當一個主動套接字被創建后,它會在收到數據時向控制進程發送{tcp, Socket, Data}
消息。控制進程無法控制這些消息流。惡意的客戶端可以向系統發送成千上萬的消息,
而它們都會被發往控制進程。控制進程無法阻止這些消息流。

進程無法控制通往服務器循環的消息流。如果客戶端生成數據的速度快于服務器處理數
據的速度,系統就會遭受數據洪流的沖擊:消息緩沖區會被塞滿,系統可能會崩潰或表現異常。

{ok,Listen} = gen_tcp:listen(Port,[...,{active,true},...]), {ok,Socket} = gen_tcp:accapt(Listen), loop(Socket). loop(Socket) ->receive{tcp,Socket,Data} ->對數據進行操作{tcp_closed,Socket} ->....end.

?

二、被動型

如果一個套接字是用被動模式打開的,控制進程就必須調用gen_tcp:recv(Socket, N)
來從這個套接字接收數據。然后它會嘗試從套接字接收N個字節。如果N = 0,套接字就
會返回所有可用的字節。在這個案例里,服務器可以通過選擇何時調用gen_tcp:recv來
控制客戶端所發的消息流

{ok,Listen} = gen_tcp:listen(Port,[...,{active,true},...]), {ok,Socket} = gen_tcp:accapt(Listen), loop(Socket). loop(Socket) ->case gen_tcp:recv(Socket,N) of{Ok, B} ->...對數據進行操作...loop(Socket);{error,closed}...end.

?

三、混合型

既不是阻塞也不是非阻塞。用{active, once}選項打開套接字。套接字在這個模式下雖然是主動的,但只針對一個消息。當控制進程收到一個消
息后,必須顯式調用inet:setopts才能重啟下一個消息的接收,在此之前系統會處于阻塞狀態。這種方法集合了前兩種模式的優點

{ok,Listen} = gen_tcp:listen(Port,[...,{active,once},...]), {ok,Socket} = gen_tcp:accapt(Listen), loop(Socket). loop(Socket) ->receive{tcp,Socket,Data} ->對數據進行操作準備接收下一個消息inet:setopts(Socket,[{active,once}]),loop(Socket);{tcp_closed,Socket} ->....end.

?

轉載于:https://www.cnblogs.com/yanwei-wang/p/4710436.html

總結

以上是生活随笔為你收集整理的erlang套接字的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。