【问题标题】:WebSocket connection to 'ws://..' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSEDWebSocket 连接到 'ws://..' 失败:连接建立错误:net::ERR_CONNECTION_REFUSED
【发布时间】:2016-01-29 06:16:16
【问题描述】:

从过去 4 小时开始搜索这个简单的套接字连接代码并出现错误。我也更改了端口,但没有任何效果。

 //create a new WebSocket object.
        var wsUri = "ws://localhost:9000/demo/server.php";  
        websocket = new WebSocket(wsUri);

    websocket.onopen = function(ev) { // connection is open 
        $('#message_box').append("<div class=\"system_msg\">Connected!</div>"); //notify user
    }

    $('#send-btn').click(function(){ //use clicks message send button   
        var mymessage = $('#message').val(); //get message text
        var myname = $('#name').val(); //get user name

        if(myname == ""){ //empty name?
            alert("Enter your Name please!");
            return;
        }
        if(mymessage == ""){ //emtpy message?
            alert("Enter Some message Please!");
            return;
        }

        //prepare json data
        var msg = {
        message: mymessage,
        name: myname,
        color : '<?php echo $colours[$user_colour]; ?>'
        };
        //convert and send data to server
        websocket.send(JSON.stringify(msg));
    });

错误:

到 'ws://localhost:9000/demo/server.php' 的 WebSocket 连接失败: 连接建立错误:net::ERR_CONNECTION_REFUSED

PHP

$host = 'localhost'; //host
$port = '9000'; //port
$null = NULL; //null var

//Create TCP/IP sream socket
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
//reuseable port
socket_set_option($socket, SOL_SOCKET, SO_REUSEADDR, 1);

//bind socket to specified host
socket_bind($socket, 0, $port);

//listen to port
socket_listen($socket);

//create & add listning socket to the list
$clients = array($socket);

【问题讨论】:

  • 你怎么知道你的 websocket 服务器启动了?您只发布了前端代码。
  • @Satisfaction 我也分享了 php 代码。请看
  • 开启 websocket 服务器。例如:在 windows 中打开 cmd 并输入 php -q c:\path\server.php

标签: php websocket


【解决方案1】:

您不是在创建 websocket 服务器。 这就是你需要的:http://socketo.me/

让 websockets 在 PHP 中正常工作很烦人而且一团糟(尤其是如果您是初学者)。 你可能会不知所措。

【讨论】:

    【解决方案2】:

    您的 PHP 使用常规(原始)tcp/ip 套接字连接。 Websockets is a protocol with a specific handshake and packet framing...如果服务器不说“Websockets”,客户端会报错。

    附言

    PHP 最初被设计为充当 HTTP 连接的 Web 应用脚本语言,通常使用 CGI 快速返回一个字符串,该字符串充当要发送的文件/html。

    从本质上讲,PHP 进程旨在缩短生命周期。

    我不建议使用 PHP 编写 websocket 服务器,尽管您可以查看Ratchet 这是一个 PHP websocket 库,可以帮助您使用 PHP 构建 websocket 应用程序。

    我建议您将 Ruby、node.js 或 Python 用于您的 Websocket 项目 - 当您深入研究项目时,它将为您省去很多麻烦,并且您可能会获得更好的社区支持来应对您在项目中面临的任何挑战方式。

    【讨论】:

    • 我怎么知道“如果服务器不说“Websockets”,客户端会报错。”
    • @MohammadFaizanKhan ,请查看我的更新答案,以及指向 Websocket 协议规范的链接。我建议您为您的 Websocket 项目考虑 Ruby、node.js 或 Python - 它会为您省去很多麻烦。
    【解决方案3】:

    尝试关闭所有防病毒软件,可能会阻塞套接字端口以进行保护。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-17
      • 2017-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-19
      • 2015-05-02
      相关资源
      最近更新 更多