php - WebSocket 服务器端脚本调用

标签 php sockets websocket

WebSocket 教程说需要做两件事:

*1。应启动服务器端脚本:

php -q path/to/server.php

*2。客户端脚本应该打开套接字连接:

var socket = new WebSocket('ws://example.com:12345/server.php');

但是请求“ws://example.com/server.php”将再次运行服务器脚本。这将导致运行多个服务器实例。或者客户端请求会导致服务端错误(socket_bind(...) => already bound)。

有人可以解释一下这种沟通模式吗?谢谢。

最佳答案

Websockets 是持久连接(它们被设计为持久连接,尽管您仍然可以滥用关闭帧来始终重新建立连接...)。 (请记住,websocket 是有状态的,而不是无状态的 HTTP)

因此,当您通过 new WebSocket('ws://example.com:12345/server.php'); 打开一个 websocket 连接时,您的网络服务器或套接字监听脚本将接受联系。 (网络服务器必须使用与您正在使用的代码相同的语言,对于 websockets,因为它们是持久连接,而不是无状态的 HTTP 式输入输出循环..)

然后它会读取您的握手请求并根据这些信息决定将请求路由到哪里。

因此,您的路由器通常应该根据指定的路径调用一些回调来委托(delegate)初始化。您通常不会使用 websockets 路由到真实文件。您更多地定义要路由到它们的处理程序的某些路径。

然后通常将您的客户端套接字映射到用户。 (例如向某个用户发送数据)

因此,对于您后续传入的数据,您只需将其与客户端状态信息一起传递给先前根据路由确定的回调。


不过,对于您的问题,相对来说很难猜出您的问题到底是什么。如果它不能回答您的问题,请在您的问题中更准确。 它是如何工作的有点太笼统了。

关于php - WebSocket 服务器端脚本调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23457616/

相关文章:

php - Cakephp:使用一个命令字段将多个记录添加到单个模型

php - 将多个结果的子查询合并为一个

javascript - Socket.io http ://localhost:3000/socket. io/socket.io.js 404(未找到) - 如何配置 socket.IO - nodejs、apache2、websockets

spring-boot - 如何在 Spring Boot 中接收 Websocket 单元测试的响应

python - celery 花中 worker 始终离线

php - 通过 Codeigniter 在 MySQL 中存储日期。日期存储为 0000 :00:00

sockets - cygwin上FD_ISSET的pselect问题

c - Unix 可执行文件在通过套接字传输时更改为文档

php - 设置 PHP Websocket 服务器究竟需要什么?

javascript - 在 JavaScript 中将 HTTP 响应主体与 header 分开