我希望修改Chris McCord的chat example以添加其他功能。基本上,我希望JavaScript客户端可以使用JSON访问许多便利功能,例如getUsersInRoom(room_id)
,is_online(user_id)
等。
但我不知道该怎么做。频道上的文档说:
每个频道将实施这四个中的每一个的一个或多个条款 回调函数 - join / 3,terminate / 2,handle_in / 3和 handle_out / 3。
这是否意味着这些是唯一允许的功能?我认为我需要的是一个套接字API,但我以前从未使用套接字,并且会感谢一些帮助。此外,该示例似乎适用于作为参数传递的字符串的直接函数调用,但我需要我的聊天系统使用JSON。我完全不确定如何才能做到这一点。
答案 0 :(得分:0)
你的问题是两个部分,所以我会给你一个由两部分组成的答案。此外,你的问题是一个更通用的设计问题,而不是特定于Elixir或凤凰城,所以我也会保留答案。
此外,该示例似乎可以使用作为参数传递的字符串进行直接函数调用,但我需要使用我的聊天系统来使用JSON。我完全不确定如何做到这一点。
没有通过网络传递JSON类型的事情。您将JSON编组(字符串化)为字符串,发送该字符串,然后解组(解析)到另一侧的JSON。所以,如果你想把你的消息结构化为JSON,这非常酷,只需记住在每个接收点编组/解组。
(释义)便利功能
最简单的方法是使这些函数成为实际的消息类型,然后使用handle_in
或handle_out
函数来挑选该类型,收集并返回数据。例如,有一条消息current_online_users
返回句柄列表。您可以过滤该客户端列表以检查是否存在。一些websocket实现也有存在钩子,但我不熟悉Phoenix中的那些。
您可以通过构建JSON消息结构来实现此目的。在顶层,您可以返回凤凰城所看到的当前房间内的用户数。
希望这有帮助。