我使用mochiweb作为服务器,它也可以获得TCP连接,客户端向其发送一个简单的字符串(没有换行符,字符串不是http)。Mochiweb使用HTTP套接字,因此无法检测到这一点(我甚至没有得到http_error
,我可以很容易地得到在Mochiweb)。我怎么解决这个问题?理想情况下,我希望改变mochiweb代码做setopt({packet, http_or_raw})
,但这种事情不存在。你建议如何处理这个问题?我目前的想法是修改mochiweb和使用erlang:decode_packet
,有没有更好的方法?
更多信息。我们的服务器是一个websocket服务。我们希望允许没有浏览器支持的人使用它,所以我们使用当浏览器不能执行websocket时,使用Flash对象来执行。flash对象需要获取flash策略文件。闪光强制文件位于以下两个位置之一:-端口843 (flash硬编码)- ws服务的端口flash协议不是基于HTTP的。Amazon ELB不允许端口转发大多数端口低于1024,所以我们实现flash服务器在同一端口通过补丁到mochiweb (https://github.com/nivertech/mochiweb/tree/ori_flash_170811) .
任何建议吗?
mochiweb不是设计来处理这个用例的,如果它不看就像HTTP一样,那么连接被关闭并被丢弃。你为此,必须绕过mochiweb_http。我建议使用另一个端口,或者使其看起来像HTTP。
如果我真的想做你说你想做的事,我会照办的mochiweb_http。将Erl转换为其他名称(例如sometimes_not_http.erl)对loop/2和request/2进行适当的修改添加mochiweb_http到您的主管,您将添加sometimes_not_http。没有必要或建议对mochiweb进行修改就地.