我是一個真正的Erlang新手(1周前開始),我試圖通過創建一個小而高效的聊天服務器來學習這種語言。 (當我說有效率的時候,我的意思是我有5臺服務器用來對數十萬連接的客戶端進行壓力測試 - 一百萬會很棒!)什麼是最好的,最有效的客戶端池技術與Erlang
我發現一些教程這樣做,唯一的是,每個教程我發現,是IRC喜歡的。如果一個用戶發送消息,除發件人以外的所有用戶都將收到該消息。 我想稍微改變一下,並使用一對一的討論。
什麼是搜索連接用戶的最有效的客戶端池? 我想過註冊過程,因爲它似乎盡我所需,但我真的不認爲這是更好的方式來做到這一點。 (或者最好的辦法就是這樣做)。
有沒有人會有這樣的建議嗎?
編輯:
每個連接的客戶端都會影響到一個ID。
當用戶連接時,它首先發送一個登錄命令給它的id。 當一個用戶要發送消息到另一個消息看起來像這樣
[ID-NUMBER][Message] %% ID-NUMBER IS A FIXED LENGTH
當我問「最有效的客戶池」,我實際上是尋找檢索最快的方式/添加/連接的客戶端列表,它可能是大(幾千 - 百年甚至幾百萬)在刪除一個客戶端
編輯2:
爲了回答一些問題:
- 我使用原始套接字(使用telnet,現在與服務器通信) - 可能會移動後到SSL ...
- 這是我自己的協議
- 每一個客戶是一個催生的Pid
- 每個客戶端的Pid都鏈接到它自己的監視器上(主要是爲了調試的原因 - 客戶端如果斷開連接,它應該通過自己從頭開始的認證來重新連接)
- 我在開始編碼之前已經閱讀了幾本書,所以我還沒有掌握Erlang的每一個方面,但我不是沒有意識到這一點,我會在需要的時候閱讀更多關於它的內容。
- 我真正想要的是存儲和搜索PID的最佳方式,以便將PID直接從進程發送到進程。
我應該使用列表編寫自己的搜索客戶端函數嗎?
還是應該使用ets?
甚至使用register/2取消註冊/ 1和whereis/1來維護我的客戶端列表,使用它的唯一ID作爲原子,這似乎是最簡單的方法,我真的不知道它是否是高效,但我很確定這是一個醜陋的解決方案;-)?
我認爲這是一個很棒的問題,雖然有點波浪。 – 2012-02-01 15:31:16
您可以針對'搜索連接用戶最有效的客戶端池是什麼?'這個更具體一點嗎?我沒有得到你的問題。 – Isac 2012-02-01 16:17:50
@Isac:我編輯了我的帖子,希望你能找到更具體的 – TheSquad 2012-02-01 16:57:21