在不运行守护程序的情况下设置Websocket服务器

时间:2012-04-10 09:07:37

标签: php apache websocket

这可能看起来像一个简单的问题,但令人难以置信的是:假设我无法运行守护进程,我将如何设置websocket服务器?

(详情:Apache 2.2.21,PHP 5.3.9,最好是PHP)

4 个答案:

答案 0 :(得分:2)

由于不想要守护进程,我认为你要求的是在Apache / PHP中运行的东西,而不是你必须运行的独立程序/服务器。

请注意,PHP还没有一个很好的选项,可以同时支持旧的Hixie WebSocket协议和更新的HyBi / IETF协议(大多数其他语言都有支持两者的服务器)。

如果您愿意考虑非PHP选项,可以将这些项目集成到Apache中并支持协议的两个版本:

答案 1 :(得分:0)

http://code.google.com/p/phpwebsocket/

服务器需要作为守护进程运行......否则服务器的意义何在?

答案 2 :(得分:0)

也许http://code.google.com/p/phpwebsocket/可以帮到你。

从howto:

// Server side
log("Handshaking...");
list($resource,$host,$origin) = getheaders($buffer);
$upgrade = "HTTP/1.1 101 Web Socket Protocol Handshake\r\n" .
       "Upgrade: WebSocket\r\n" .
       "Connection: Upgrade\r\n" .
       "WebSocket-Origin: " . $origin . "\r\n" .
       "WebSocket-Location: ws://" . $host . $resource . "\r\n" .
       "\r\n";
$handshake = true;
socket_write($socket,$upgrade.chr(0),strlen($upgrade.chr(0)));


// Client side
var host = "ws://localhost:12345/websocket/server.php";
try{
  socket = new WebSocket(host);
  log('WebSocket - status '+socket.readyState);
  socket.onopen    = function(msg){ log("Welcome - status "+this.readyState); };
  socket.onmessage = function(msg){ log("Received: "+msg.data); };
  socket.onclose   = function(msg){ log("Disconnected - status "+this.readyState);     };
}
catch(ex){ log(ex); }

答案 3 :(得分:-1)

您可以将“服务器”作为长期轮询的apache请求运行。您可以使用普通的Web浏览器来启动/控制它,但也可以使用telnet或curl。与适当的systemd服务相比,它会很笨拙,但是可以正常工作