WebSocket 可以连接到 Socket 服务器吗?
Posted
技术标签:
【中文标题】WebSocket 可以连接到 Socket 服务器吗?【英文标题】:Can a WebSocket be connected to a Socket Server? 【发布时间】:2013-09-13 16:59:36 【问题描述】:我想用php和nginx实现一个简单的WebSocket服务器,我的印象如下:
-
一旦 Websocket 通过RFC 6455 中描述的“协议切换”,它就可以与任何标准(非“Web”)套接字服务器进行通信。
根据nginx manual,nginx可以进行前面提到的“协议切换”。
考虑到这一点,我尝试了以下简单的实现,其中包括一个 javascript 客户端、一个 nginx 配置和一个 PHP 服务器(见下文)。
结果:
PHP 服务器接收包含Connection: upgrade
、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 manual 中示例#1 中的描述实现,仅将$address
更改为127.0.0.1
。)
【问题讨论】:
【参考方案1】:可以,但前提是套接字服务器实现了 websocket 协议。如果您询问它是否可以用作通用 TCP 或 UDP 套接字,它不能。句号。
【讨论】:
有没有可能做一个只需要几百行代码的简单实现(比如过时的code.google.com/p/phpwebsocket)?或者您是否不可避免地要以数千行结尾(例如socketo.me)? 这是一个复杂的标准。取决于您构建的底层系统有多复杂。要在现有的 Web 服务器之上构建它,可能有数百个。从头开始?是的,成千上万。还有很多 RFC 可供阅读。 见鬼去吧。我会使用图书馆。以上是关于WebSocket 可以连接到 Socket 服务器吗?的主要内容,如果未能解决你的问题,请参考以下文章
无法从android okhttp3连接到节点websocket
Socket.IO-Client-Swift 未连接到 nodejs socket.io 服务器
无法使用 ssl 和 apache 连接到 websocket
WebSocket 连接到“ws://.../socket.io/”失败:WebSocket 握手期间出错:net::ERR_CONNECTION_RESET