Awe*_*own 3 erlang ssl websocket cowboy
我正在开发一个客户端 - 服务器应用程序,并负责添加对websockets运行的支持.我在服务器端使用Cowboy,并且一直在使用Erlang websocket客户端进行测试.
事情应该是这样的:
客户端模块实现
handle_info({Transport, Socket, Data}, StateName, State) ->
... do stuff with data ...
Run Code Online (Sandbox Code Playgroud)
当数据出现时,由底层传输(gen_tcp或ssl)调用.
当我配置要使用的客户端和服务器时,一切正常gen_tcp.当我改为使用时ssl,websocket握手完成,但在步骤4中,我得到一个回调handle_info,它只包含从服务器返回的数据的第一个字节.后续回调将包含响应的其余部分.
我真的很担心这种行为,因为交换gen_tcp的相同代码工作正常,我们有两个其他传输使用ssl(但不是websockets或cowboy)构建,同样不会出现这种行为.
任何人都可以建议可能导致数据以这种方式分裂的原因吗?如果我不需要,我宁愿不要为此写处理.
更新:仅仅为了踢,我修改了客户端,以便它等待两次回调发生,并在尝试解析它之前连接两者的数据.这解决了这个问题,但仍让我感到困惑.
我注意到了一些事情:
不知道这是否相关.
TCP中没有消息边界.您无权依赖您期望的行为.传输可以为您提供所需的任何数据,只要它以正确的顺序提供所有数据,完整无缺.TCP为您提供了一个字节流,并且大多数SSL库同上(尽管在较低级别上确实存在SSL记录消息).
| 归档时间: |
|
| 查看次数: |
323 次 |
| 最近记录: |