WebSocket和CGI/FastCGI/SCGI协议

14

我正在寻找有关客户端Web套接字、Web服务器和实际应用程序后端之间交互的资源,这些后端工作在CGI、FastCGI或SCGI协议背后。

目前似乎这是不可能的,因为:

请求长度在CONTENT_LENGTH变量中具体定义,所以我不能指望数据将继续从标准输入流中来自Web服务器,或者我可以吗?因为未设置CONTENT_LENGTH则定义没有请求体。

应用程序需要读取CONTENT_LENGTH字节的数据,如果读取的数据少于此值,则被视为断开连接的客户端。

  • 有关如何更新(F | C)CGI或如何与WebSockets配合使用的资源吗?
  • 是否存在支持WebSockets的SCGI / FCGI / CGI规范草案?
  • 是否已知有支持WebSockets的Web服务器?
  • 如果是这样,它们是否支持* CGI协议?
  • 您是否有使用WebSockets和* CGI工作的经验?

谢谢,所有信息都将是适当的。

Artyom

有人能回答吗?


Syllable Web Server Cheyenne获得WebSocket框架...请参见http://www.osnews.com/story/22681/Syllable_Web_Server_Cheyenne_Gets_WebSocket_Framework - Dr. belisarius
1个回答

5
您可以在此处找到适用于lighttpd的mod_websocket模块(点击此处)。构建该模块时,请确保指定您想要使用的正确websocket协议版本(版本-75或-76)。从WebKit夜间构建r59903和Chrome 6.0.414.0(r47952)开始,仅支持协议版本-76。
请注意,在使用WebSockets时,您不再需要CGI、FastCGI或SCGI协议来连接Web服务器与应用程序后端。只需在应用程序中实现一个TCP监听器(供mod_websocket连接),并使用套接字进行异步I/O即可。

有趣的是,但从我看到的内容来看,它并没有传递任何HTTP头数据,例如cookie等到后端。那么我应该如何管理会话呢?我需要显式地发送这些数据而不是从Web服务器获取。 - Artyom
您的WebSocket连接是在HTTP会话上下文中创建的,您不必担心这个问题。此外,HTTP和WebSocket当然是完全不同的协议,因此在WebSocket连接中,您无法访问HTTP标头。请记住,WebSocket协议仅在TCP之上提供最小的框架,因此任何应用程序特定的数据交换都必须由您自己定义和实现,就像使用常规套接字一样。 - raffel
4
仅供参考,据我所知,HTTP头部信息有多种用途:了解会话数据、了解URL的访问情况、了解远程主机的IP地址等等。因此,WebSocket远非仅仅是一个套接字。 - Artyom
嗯,WebSocket 握手完成后,它非常类似于常规套接字。即使是 Erlang 的 Joe Armstrong 也这样说 :) http://armstrongonsoftware.blogspot.com/2009/12/comet-is-dead-long-live-websockets.html - raffel
4
握手后可以,但握手本身是一个有效的HTTP请求,在WebSocket服务器端应该不受干扰地到达。RFC 6455[链接]指出,客户端可以发送其他头部,例如cookie或身份验证相关头部。尽管如此,你在使用WebSocket时不需要SCGI或FCGI,应该直接在你的应用程序中使用WebSocket协议。如果中间有代理作用,原始客户端地址如何转发取决于代理的配置,可能会存储在“X-Forwarded-For”头部中。 - Maarten
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接