我将mochiweb用于服务器,该服务器也可能获得一个TCP连接,客户端向该连接发送一个简单的字符串(没有换行符,该字符串就不是http)。Mochiweb使用HTTP套接字,因此无法检测到这一点(我甚至无法获得在mochiweb中可以轻松获得的http_error )。我该如何解决这个问题呢?理想情况下,我希望将mochiweb代码更改为setopt({packet, http_or_raw}),但这种事情并不存在。您建议如何处理此问题?我现在的想法是修改mochiweb并使用erlang:decode_packet,有没有更好的方法?
编辑:
更多信息。我们的服务器是websocket服务。我们希望允许没有支持ws的浏览器的人们使用它,所以当浏览器不能时,我们使用flash对象来做websocket。闪存强制文件位于两个位置之一:-端口843 (闪存硬编码)- ws服务的端口闪存协议不是基于HTTP的。Amazon ELB不允许1024以下的大多数端口进行端口转发,因此我们通过mochiweb (https://github.com/nivertech/mochiweb/tree/ori_flash_170811)的补丁在同一端口实现了闪存服务器。
有什么建议吗?
发布于 2011-08-18 13:36:39
mochiweb不是为处理这种用例而设计的,如果它看起来不像HTTP,那么连接就会关闭并被丢弃。为此,您必须绕过mochiweb_http。我建议使用替代端口,或者让它看起来像HTTP。
如果我真的想做你想做的事情,我会将mochiweb_http.erl复制到其他名称(例如sometimes_not_http.erl),并对循环/2和请求/2…进行适当的更改然后添加sometimes_not_http,而不是将mochiweb_http添加到您的主管。不需要也不建议就地对mochiweb进行修改。
https://stackoverflow.com/questions/7085379
复制相似问题