0

我正在将 mochiweb 用于服务器,该服务器也可能获得客户端向其发送简单字符串的 TCP 连接(没有换行符,该字符串不是 http)。Mochiweb 使用 HTTP 套接字,因此无法检测到这一点(我什至不明白http_error我可以轻松进入 mochiweb)。我该如何解决这个问题?理想情况下,我希望更改 mochiweb 代码来做,setopt({packet, http_or_raw})但这种事情不存在。你会建议如何处理这个?我目前的想法是修改 mochiweb 并使用erlang:decode_packet,有更好的方法吗?

编辑:

更多信息。我们的服务器是一个 websocket 服务。我们希望允许没有 ws 支持浏览器的人使用它,因此当浏览器不能使用时,我们使用 flash 对象来执行 websocket。flash 对象需要获取一个 flash 策略文件。Flash 强制文件位于以下两个位置之一: - 端口 843(Flash 硬编码) - ws 服务的端口 Flash 协议不是基于 HTTP 的。Amazon ELB 不允许对低于 1024 的大多数端口进行端口转发,因此我们通过 mochiweb 的补丁(https://github.com/nivertech/mochiweb/tree/ori_flash_170811)在同一端口实现了闪存服务器。

有什么建议吗?

4

1 回答 1

0

mochiweb 不是为处理这种用例而设计的,如果它看起来不像 HTTP,那么连接就会关闭并被丢弃。为此,您必须绕过 mochiweb_http。我建议使用备用端口,或者让它看起来像 HTTP。

如果我真的想做你说你想做的事,我会将 mochiweb_http.erl 复制到其他名称(例如有时_not_http.erl)并对 loop/2 和 request/2 进行适当的更改......然后而不是将 mochiweb_http 添加到您的主管有时会添加_not_http。没有必要也不建议对 mochiweb 进行就地修改。

于 2011-08-18T05:36:39.333 回答