3
我開始學習Erlang,希望能夠爲實時多人遊戲創建遊戲服務器。目前,我正在努力估計Erlang對斯卡拉造成的工作量和頭痛。所以,首先,我創建一個簡單的Erlang服務器進程。我在Jesse Farmer上發現了一個很好的教程,我修改了這些教程以瞭解更多信息。我的修改後的代碼與他的echo服務器類似,只不過它用英文單詞表示並簡單地返回Lojban等價物。但是,只有通配符的情況纔會被選中。下面是代碼:Erlang TCP服務器處理
我目前的測試是打開兩個終端窗口,並執行
[CONSOLE 1]
erl
c(translate).
translate:listen(8888).
[CONSOLE 2]
telnet localhost 8888
whatever
Hello
,輸出變爲:
I don't understand
I don't understand
如何可以解析傳入的數據?這種模式匹配的風格似乎完全失敗。謝謝!
現象!這似乎很好。在此之後,我將如何從輸入數據包中提取信息?我試過類似'<<「我的名字是」,名稱「,\ r \ n」>> - > gen_tcp:send(Socket,「Hello」++ Name ++「!\ n」)',但它永遠不會也碰到這種情況。 – Grimless
@Grimless兩個錯誤:1.在這裏匹配'Name'的正確方法:''「我的名字是」,名稱:10/binary「\ r \ n」''其中'10'是'Name'長度(你應該在任何情況下爲非休息匹配指定長度)。我知道,這不是你真正想要:)所以嘗試首先拆分'數據'(以'Name'將二進制的最後部分)。 2.「Hello」++名稱++「!\ n」'會失敗。這不是:''「Hello」,Name/binary,「!\ n」>>(或者如果你想使用列表「Hello」++ binary_to_list(Name)++「!\ n」但對於簡單操作來說太多的操作)。 –
嗯,''你好「++名稱++」!\ n「似乎編譯得很好,但它可能不會引起問題,因爲該子句永遠不會執行。我將如何去'分割'數據'第一'?我無法保證輸入名稱的長度,那麼'Name:10/binary'如何處理輸入,例如「The World of Duke」?此外,將代碼更改爲'<<「我的名字是」,名稱:10/binary「,\ r \ n」>> - > gen_tcp:send(Socket,string:join([「mi'o」,Name, 「\ r \ n」],「」));'仍然不起作用。 – Grimless