2016-09-23 47 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消息结构。在顶层,您可以返回菲尼克斯看到的房间中当前的用户数。

希望这会有所帮助。

相关问题