Faye:即使套接字打开,也无法在浏览器中发送 GET 消息,通过 CURL 工作和响应数据

Posted

技术标签:

【中文标题】Faye:即使套接字打开,也无法在浏览器中发送 GET 消息,通过 CURL 工作和响应数据【英文标题】:Faye: Can't send GET messages in browser even though socket is open, working and responding with data via CURL 【发布时间】:2012-10-11 23:01:43 【问题描述】:

所以我的 websocket 可以正常打开到 faye,我正在使用 nginx_tcp_proxy 模块。当我运行 curl 时,它看起来不错:

$ curl http://now.2u.fm:9200/faye\?message\=%5B%7B%22channel%22%3A%22%2Fmeta%2Fhandshake%22%2C%22version%22%3A%221.0%22%2C%22supportedConnectionTypes%22%3A%5B%22callback-polling%22%5D%2C%22id%22%3A%221%22%7D%5D\&jsonp\=__jsonp6__
__jsonp6__(["id":"1","channel":"/meta/handshake","successful":true,"version":"1.0","supportedConnectionTypes":["long-polling","cross-origin-long-polling","callback-polling","websocket","eventsource","in-process"],"clientId":"jls0srprht51xb368yrojft3h4drgu0","advice":"reconnect":"retry","interval":0,"timeout":45000]);#

并使用 -I 标志卷曲

HTTP/1.1 200 OK
...
Connection: close

但是当我的网站尝试将其作为 GET(无错误代码)时,我收到了失败的 GET 请求:

编辑:我注意到它刚才说“交换协议”!

与我尝试直接在浏览器中点击 the url 时相同。

我的直觉说,“嘿,那是因为你打开了一个 tcp 连接而不是一个 http 连接!”,但是 private_pub 使用 GET 吗?但据我所知,GET 请求通过 TCP 就可以了,但我做错了。

【问题讨论】:

【参考方案1】:

我发现问题是 Faye 需要能够打开套接字并使用 http。因为 private_pub 假设你在同一个域/端口上都这样做,所以使用 tcp 模块是不可能的,而无需修改 private_pub 和它正在加载的 faye 扩展以使用正确的端口。

最后我改用了 HAProxy,因为它设置起来要简单得多,而且不需要修改私人 pub。

【讨论】:

您能否链接到一个学习如何将 HAProxy 添加到典型 nginx/unicorn/rails 设置的好地方?

以上是关于Faye:即使套接字打开,也无法在浏览器中发送 GET 消息,通过 CURL 工作和响应数据的主要内容,如果未能解决你的问题,请参考以下文章

即使设置 cap_net_raw 也无法在 linux 容器中打开原始套接字

即使浏览器关闭,服务人员也会在后台运行吗?

有没有办法让这个(内部 URL)JQuery 计数器每 20 秒读取一次 JSON

Android LocalSocket客户端无法连接到抽象命名空间中的本机服务套接字

带有 scala 客户端的 ruby​​ faye 服务器

OutLook发件箱中部分邮件无法正常发送,即使重新按发送都发不出去