在Apache上设置websocket?
所以我正在做一些关于websocket的研究,我有几个问题似乎无法找到明确的答案:
我如何在Linux服务器上设置Web套接字? 有没有Apache模块? 我需要使用第三方PHP代码还是类似的?
问题1中描述的方法有什么缺点,我应该知道除浏览器兼容性之外的其他方面吗?
我怎么能“升级”我的websocket安装到一个安全的websocket安装(ws:// wss://)? 如果SSL已经设置在我的Apache服务器上,这会变得更容易还是更困难?
有没有什么语言可以用来连接到我的网络套接字而不是JavaScript?
什么是Web套接字的默认请求方法?
我无法回答所有问题,但我会尽我所能。
正如你所知道的那样,WS只是一个持久的全双工TCP连接,带有框架消息,其中初始握手类似于HTTP。 您需要一些服务器来监听传入的WS请求,并将处理程序绑定到它们。
现在,使用Apache HTTP Server可能会出现这种情况,并且我已经看到了一些示例,但没有官方支持,它变得复杂。 Apache会做什么? 你的处理程序在哪里? 有一个模块将传入的WS请求转发给外部共享库,但这对于使用WS的其他强大工具来说并不是必需的。
现在WS服务器的趋势包括:Autobahn(Python)和Socket.IO(Node.js =服务器上的JavaScript)。 后者还支持其他hackish“持久”连接,如长轮询和所有COMET的东西。 还有一些其他鲜为人知的WS服务器框架,如棘轮(PHP,如果你只是熟悉这一点)。
在任何情况下,您都需要侦听端口,当然,该端口不能与已在您的计算机上运行的Apache HTTP Server相同(默认值为80)。 你可以使用类似8080的东西,但即使这个特定的东西是一个流行的选择,但一些防火墙可能仍会阻止它,因为它不应该是Web流量。 这就是为什么许多人选择443,这是HTTP安全端口,出于显而易见的原因,防火墙不会阻止。 如果您不使用SSL,则可以将80用于HTTP,将443用于WS。 WS服务器不需要安全; 我们只是使用端口。
编辑 :根据Iharob Al Asimi,前一段是错误的。 我没有时间去调查这件事,所以请看他的作品了解更多细节。
正如维基百科显示的那样,关于该协议,它看起来像这样:
客户发送:
GET /mychat HTTP/1.1
Host: server.example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw==
Sec-WebSocket-Protocol: chat
Sec-WebSocket-Version: 13
Origin: http://example.com
服务器回复:
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: HSmrc0sMlYUkAGmm5OPpG2HaGWk=
Sec-WebSocket-Protocol: chat
并保持连接活着。 如果你可以实现这个握手和基本的消息框架(用描述它的小标题封装每条消息),那么你可以使用任何你想要的客户端语言。 JavaScript仅用于Web浏览器,因为它是内置的。
正如你所看到的,默认的“请求方法”是一个初始HTTP GET,虽然这不是真正的HTTP,并且在握手之后丢失了与HTTP相同的所有内容。 我猜服务器不支持
Upgrade: websocket
Connection: Upgrade
将回复一个错误或一个页面内容。
Apache HTTP Server的新版本2.4有一个名为mod_proxy_wstunnel的模块,它是一个websocket代理。
http://httpd.apache.org/docs/2.4/mod/mod_proxy_wstunnel.html
链接地址: http://www.djcxy.com/p/44715.html上一篇: Setting up a websocket on Apache?
下一篇: What are my offline and socket options for a modern web application?