【问题标题】:HTML 5 Web SocketsHTML5 网络套接字
【发布时间】:2011-09-09 18:36:28
【问题描述】:

好的,我已经阅读了一百万篇教程,并且在 cmets 部分中,总是有人提出与我现在所经历的相同的问题,但没有给出真正的答案,只是为了澄清一下,是的,我使用的是最新的支持 websockets 的 chrome 版本。

页面加载后,我不断收到“断开连接”错误。

首先我在 IIS 上运行 PHP 5(不是我的选择)

我已经下载http://bohuco.net/dev/websocket/?source=WebSocketServer.php

并尝试测试http://www.flynsarmy.com/2010/05/php-web-socket-chat-application/

我下载的文件的位置在 www.something.co.uk/html5/test

其中包括上面的演示文件以及 websocket php。

我很困惑的是如何//连接到服务器

var server = new ServerEventsDispatcher("<someip>:12345");

与位于上述文件路径中的 server.php 连接。

我可以在 someip 部分添加域和 URL 吗?

非常感谢您对此的任何帮助。

编辑

在阅读了更多之后,我似乎可以。

http://dev.w3.org/html5/websockets/

var socket = new WebSocket('ws://game.example.com:12010/updates');
socket.onopen = function () {
  setInterval(function() {
    if (socket.bufferedAmount == 0)
      socket.send(getUpdateData());
  }, 50);
};

所以我的下一个问题(因为这仍然不能解决问题)

在 server.php 文件中,localhost 是有效的还是必须是 ip/domain?

$server = new WebsocketServer('localhost', 12345, 'process');

编辑

我已将 Web 套接字连接更改为

//Connect to the server
var server = new ServerEventsDispatcher("domain.co.uk:81/path/to/server.php");

并将scripts.php中的端口更改为81,但仍然没有...

【问题讨论】:

    标签: php sockets web


    【解决方案1】:

    您已链接的 WebSocketServer 类在创建对象时给定的端口上启动所述服务器。请注意,由于显而易见的原因,此端口不能与您的网络服务器相同。

    javascript端需要向该服务器打开一个WebSocket,假设ServerEventsDispatcher内部在ws://:12345/上打开一个新的WebSocket,你需要添加运行WebSocketServer的服务器的主机名或IP地址正确的端口号。

    因此,假设 WebSocketServer 在端口 81 上的 someserver.domain.com 上运行(因为 IIS 最有可能使用 80):

    var server = new ServerEventsDispatchet("someserver.domain.com:81");
    

    查看该 javascript 类的代码,它实际上直接使用该地址打开了一个 WebSocket;因此,如果您想指定协议(或 SSL 的 wss),也可以在那里使用 ws://someserver.domain.com:81

    在您的编辑后进行编辑: 我会在该 WebSocketServer 类中为您的服务器使用公共地址;因为它会尝试绑定它:

    socket_bind($this->master, $this->address, $this->port) or die("socket_bind() failed");
    

    另请参阅:http://nl3.php.net/manual/en/function.socket-bind.php

    除了您的最新编辑:

    您不应该将路径添加到您的 php 脚本。当您打开 PHP 脚本时,它应该尝试打开该 WebSocket 服务器;但是 websocket 服务器只会在"ws://&lt;servername&gt;:&lt;port&gt;" 运行。所以在javascript中你可以使用它作为地址,然后在浏览器中浏览到测试程序的php脚本。

    -- 编辑供服务器使用--

    因为这在评论中会变得太长/不可读;根据站点,您必须使用 php 命令行来实际启动服务器类:

    “打开一个终端窗口(Windows 上的命令行)并导航到您的项目目录。使用 PHP 执行脚本,如果一切顺利,您应该会收到以下消息:”

    $ php -f server.php
    Server Started : 2010-05-26 22:40:03
    Listening on   : localhost port 12345
    Master socket  : Resource id #5
    

    完成后;服务器应该已启动并正在侦听。然后,您可以使用 javascript 中的 WebSocket 和上面所说的 websocket url 连接到该服务器 :)

    【讨论】:

    • 您可以尝试通过检查 netstat 输出来检查 websocketserver 是否真的在服务器上运行。当您浏览到启动 WebSocketServer 的 php 脚本时,它应该显示在那里正在侦听给定端口 (:81)。此外,您的服务器必须允许从端口 81 传入流量。
    • !在端口 81 上浏览到 server.php 的 URL 不起作用,但在端口 80 上可以!让我进一步调查!
    • 我认为主要问题是您对脚本的作用有错误的看法。 server.php 类实际上在端口 81 上启动了第二个(!)服务器,它接受 websocket 流量。 websocket 本身不是通过 IIS 处理的,而是 PHP 实现的服务器。因此,为什么 javascript 中的 WebSocket 应该只连接到 ws://server:port/ 而没有 /path/to/server.php
    • 那我该如何激活script.php呢?它一直在运行吗?
    • 我通读了这篇文章,并在上面的答案中添加了相关部分:)
    猜你喜欢
    • 2013-03-18
    • 1970-01-01
    • 2021-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多