结合websockets和http

时间:2017-11-23 17:30:42

标签: http websocket

我正在创建一个想要显示统计信息的程序。 为此,我决定使用websockets和http。 Websockets,因为它不需要轮询,但允许我的服务器推送任何更改(我打开以获取不同解决方案的建议),以便快速更新。对于websockets我使用websocket ++库,而对于http我使用libmicrohttpd。 该程序在Unix / Linux系统上运行。

现在使用websocket ++创建websockets很简单。我让用户决定一个portnumber就是这样。使用libmicrohttpd的http也是一样的。 现在的问题是,我如何从html指向那个websocket服务? 我只知道一个portnumber(侦听所有网络接口;它绑定到0.0.0.0)而不是主机名。我试过http://:8001/(所以没有任何主机名或IP地址),但至少firefox不接受它。 那我怎么解决呢? 理论上我可以让websocket ++执行http处理,但这对于像图像这样的二进制文件不起作用,它也不允许你处理HEAD请求。

2 个答案:

答案 0 :(得分:0)

  

我只知道一个portnumber(侦听所有网络接口;它绑定到0.0.0.0)而不是主机名。我尝试了http://:8001/(所以没有任何主机名或IP地址),但至少firefox并没有这样做。

这是不可能让webbrowser在指定端口搜索指定的网页,因为您有超过百万个网络服务器地址(根本不可能知道)来搜索开放端口。 因此,唯一的解决方案是在上面提到的html中提供一个url,脚本可以用来连接到你的服务。

如果要绑定到localhost(127.0.0.1):http://localhost:8001/http://127.0.0.1:8001/

答案 1 :(得分:0)

找到解决方案:

http请求(通常是 - 尝试使用chrome& firefox)“主机:” - 标头。 E.g:

GET / HTTP/1.1
Host: keetweej.vanheusden.com:8000
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0

所以我现在所做的是从主机记录中删除主机名,并将websocket的端口号添加到它。 这有效!