mochiweb 中的非 http
我正在使用 mochiweb 作为服务器,该服务器也可能获得 TCP 连接,客户端向该连接发送一个简单的字符串(没有换行符,该字符串不是 http)。 Mochiweb 使用 HTTP 套接字,因此无法检测到这一点(我什至没有得到在 mochiweb 中可以轻松得到的 http_error
)。我该如何解决这个问题?理想情况下,我希望更改 mochiweb 代码来执行 setopt({packet, http_or_raw})
但这种事情不存在。您建议如何处理这个问题?我目前的想法是修改mochiweb并使用erlang:decode_packet
,有更好的方法吗?
编辑:
更多信息。 我们的服务器是一个 websocket 服务。我们希望允许 没有 ws 支持浏览器的人无法使用它,所以我们使用 当浏览器无法执行 websocket 时,使用 flash 对象执行 websocket。闪存对象需要获取闪存策略文件。闪光 强制文件位于两个位置之一: - 端口 843(闪存硬编码) - ws服务的端口 Flash 协议不是基于 HTTP 的。 Amazon ELB 不允许端口转发 大多数端口低于 1024,所以我们 通过补丁在同一端口实现闪存服务器 mochiweb(https://github.com/nivertech/mochiweb/tree/ori_flash_170811)。
有什么建议吗?
I am using mochiweb for a server that may also get a TCP connction to which the client sends a simple string (without a newline, the string is not http). Mochiweb uses HTTP sockets and therefore fails to detect this (i dont even get http_error
that i can easily get in mochiweb). How can I solve this? Ideally I wish to change mochiweb code to do setopt({packet, http_or_raw})
but this kind of thing does not exist. How would you recommend handling this? my current idea was to modify mochiweb and use erlang:decode_packet
, is there a better approach?
EDIT:
More info.
Our server is a websocket service. We wish to allow
people without a ws supporting browser to use it so we use a
flash object to do websocket when the browser can't. The flash object needs to get a flash policy file. Flash
forces the file to be in one of two places:
- port 843 (flash hard coded)
- the port of the ws service
The flash protocol is NOT HTTP based.
Amazon ELB does not allow port forwarding for
most ports below 1024, so we
implemented the flash server in the same port via a patch to
mochiweb (https://github.com/nivertech/mochiweb/tree/ori_flash_170811).
Any advice?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
mochiweb 并不是为处理这个用例而设计的,如果它看起来不是这样的话
与 HTTP 一样,连接将被关闭并被丢弃。你
为此,必须绕过 mochiweb_http 。我建议
使用备用端口,或者使其看起来像 HTTP。
如果我真的想做你说你想做的事,我会复制
mochiweb_http.erl 更改为其他名称(例如,sometimes_not_http.erl)以及
对loop/2和request/2进行适当的更改...然后而不是
将 mochiweb_http 添加到您的主管,您将添加 times_not_http。
没有必要也不建议对 mochiweb 进行修改
就地。
mochiweb isn't designed to handle this use case, if it doesn't look
like HTTP then the connection is closed and it gets discarded. You
would have to go around mochiweb_http for this purpose. I'd suggest
using an alternate port, or making it look like HTTP.
If I really wanted to do what you say you want to do, I would copy
mochiweb_http.erl to some other name (e.g. sometimes_not_http.erl) and
make the appropriate changes to loop/2 and request/2… then instead of
adding mochiweb_http to your supervisor you'd add sometimes_not_http.
It is not necessary or recommended to make modifications to mochiweb
in-place.