所以我正在做一些关于websocket的研究,我有几个问题似乎无法find明确的答案:
我如何在Linux服务器上设置一个Web套接字? 有一个Apache模块? 我必须使用第三方PHP代码或类似的?
问题1中描述的方法有什么缺点,除了浏览器兼容性之外,我应该知道吗?
我怎么能“升级”我的websocket安装到安全的websocket安装(ws:// wss://)? 如果已经在我的Apache服务器上设置了SSL,这会变得更容易还是更困难?
有什么语言,我可以用来连接到我的networking套接字以外的JavaScript?
什么是Web套接字的默认请求方法?
我无法回答所有的问题,但我会尽我所能。
正如你所知道的那样,WS只是一个持久的全双工TCP连接,其中初始的握手信号是类似HTTP的。 您需要一些服务器来监听传入的WS请求,并将处理程序绑定到它们。
现在Apache HTTP服务器可能会出现这种情况,我已经看到了一些例子,但是没有官方的支持,它变得复杂了。 Apache会做什么? 你的处理程序在哪里? 有一个将传入的WS请求转发到外部共享库的模块,但是这对于使用WS的其他强大工具来说并不是必须的。
现在WS服务器的趋势包括: Autobahn (Python)和Socket.IO (Node.js =服务器上的JavaScript)。 后者也支持其他hackish“永久”的连接,如长时间轮询和所有的COMET的东西。 还有其他一些不为人知的WS服务器框架,如棘轮 (PHP,如果你只是熟悉)。
在任何情况下,您都需要侦听某个端口,当然,该端口不能与已经在您的机器上运行的Apache HTTP服务器(默认值= 80)相同。 你可以使用类似8080的东西,但是即使这个特定的东西是一个流行的选择,一些防火墙可能仍然会阻止它,因为它不应该是Web流量。 这就是为什么许多人选择443,这是HTTP安全端口,由于显而易见的原因,防火墙不会阻止。 如果您不使用SSL,则可以使用80用于HTTP,使用443用于WS。 WS服务器不需要安全; 我们只是使用端口。
编辑 :根据Iharob铝阿西米,上一段是错误的。 我没有时间去调查这个,所以请看他的工作了解更多细节。
关于该协议,正如维基百科显示的 ,它看起来像这样:
客户发送:
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