2016-09-23 58 views
0

我希望修改Chris McCord的chat example以添加其他功能。基本上,我希望JavaScript客戶端可以使用JSON訪問許多便利功能,例如getUsersInRoom(room_id)is_online(user_id)等。將自定義功能添加到頻道

但我不知道如何做到這一點。在通道的文檔說:

每個頻道將實現每個這四個 回調函數的一個或多個條款 - 加入/ 3,終止/ 2,handle_in/3,和 handle_out/3。

這是否意味着這些是唯一允許的功能?我認爲我需要的是一個套接字API,但我從來沒有使用過套接字,並會感謝一些幫助。此外,該示例似乎適用於將字符串作爲參數傳遞的直接函數調用,但我需要我的聊天系統使用JSON。我完全不知道我怎麼能做到這一點。

回答

0

你的問題是一個單獨的問題,所以我會給你一個由兩部分組成的答案。此外,你的問題是一個更通用的設計,而不是特定於Elixir或Phoenix,所以我一般也會保留答案。

此外,該示例似乎工作在作爲參數傳遞字符串的直接函數調用,但我需要我的聊天系統使用JSON。我完全不知道我怎麼能做到這一點。

有沒有這樣的事情通過電線傳遞JSON類型。您將JSON編組(串化)爲一個字符串,發送該字符串,然後在另一端解組(解析)回JSON。所以,如果你想把你的消息構造成JSON,那真是太棒了,只要記住每個接收點的編組/解組就可以了。

(改寫)便利功能

做到這一點的最簡單的方法是通過使這些功能的實際的消息類型,然後使用或者handle_inhandle_out函數來挑選出類型,收集和返回數據。例如,有一條消息是current_online_users,它返回一個句柄列表。您可以過濾客戶端列表以檢查是否存在。一些websocket實現也存在掛鉤,但我不熟悉Phoenix中的那些。

另一種可以做到這一點的方法是通過構建到您的JSON消息結構。在頂層,您可以返回菲尼克斯看到的房間中當前的用戶數。

希望這會有所幫助。