我想使用 PHP 和 nginx 实现一个简单的 WebSocket 服务器,我的印象如下:
考虑到这一点,我尝试了以下由 JavaScript 客户端、nginx 配置和 PHP 服务器组成的简单实现(见下文)。
结果:
Connection: upgrade
PHP 服务器接收包含,Sec-WebSocket-Key: ***
和类似字段的 WebSocket HTTP 标头。我认为这很好。- 但是,该
onopen
事件永远不会在客户端上触发,这就是我卡住的地方。
问题:
- 我是否误解了一些细节,或者可能是它如何工作的整个概念?
- 如何使我的代码示例工作?
Javascript 客户端:
function socket() {
var ws = new WebSocket("ws://socket/hello/");
ws.onopen = function() {
ws.send("Hello, World!");
};
ws.onmessage = function(event) {
console.log(event.data);
};
}
socket();
nginx配置:
server {
location /hello/ {
proxy_pass http://localhost:10000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
server_name socket;
root socket;
}
PHP服务器:
(完全按照PHP 手册中示例 #1 中的描述实现,仅更改$address
为127.0.0.1
。)