在我的端点中,我看起来像:
socket "/socket", MarsWeb.UserSocket,
websocket: [transport: Phoenix.Transports.WebSocket, serializer: {MarsWeb.JsonCamelSerializer, "~>2.0"}],
我正在尝试用自己的JSON序列化程序(对传出消息中的驼峰编码进行编码)。
我知道此语法不正确;它应该看起来如何?
更新:
因此,出于测试目的,我将其设置如下:
socket "/socket", MarsWeb.UserSocket,
websocket: [transport: Phoenix.Transports.Websocket, serializer:
Phoenix.Socket.V2.JSONSerializer]
但是它实际上不起作用:
** (FunctionClauseError) no function clause matching in Phoenix.Socket.negotiate_serializer/2
(phoenix 1.4.15) lib/phoenix/socket.ex:613: Phoenix.Socket.negotiate_serializer(Phoenix.Socket.V2.JSONSerializer, "2.0.0")
我认为这是一个额外的版本号问题,从源头看,它似乎需要一个元组...
在Phoenix.Endpoint.socket/3
的文档中,我们可以看到:
Phoenix.Endpoint.socket/3
-控制websocket配置。默认为:websocket
。可能是true
或选项的关键字列表。有关整个列表,请参见“共享配置”和“ WebSocket配置”。
以下共享配置:
false
-消息的序列化器列表。有关更多信息,请参见:serializer
。
并且串行器应实现Phoenix.Socket
,并且串行器Phoenix.Socket.Serializer
函数必须返回Phoenix.Socket.Serializer
。同样,decode!
键需要Phoenix.Socket.Message
(模块)作为值,如serializer:
所示。
一个人不能在代码中强制执行版本,将采用可用的模块。
也就是说,如果atom
实现here行为,那么下面的方法会起作用。
MarsWeb.JsonCamelSerializer
最后,您需要粘贴一个元组列表。
我的解决方法是:
Phoenix.Socket.Serializer