Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/429.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用JavaScript的即时消息系统_Javascript_Php_Ajax_Sockets - Fatal编程技术网

使用JavaScript的即时消息系统

使用JavaScript的即时消息系统,javascript,php,ajax,sockets,Javascript,Php,Ajax,Sockets,我有一个学校项目,我需要创建一个即时网络信息系统 为了完成这项任务,我研究了PHP套接字 从这些我开始看到一个模式。正如您所知,PHP只能运行一次(从上到下),从这些示例中,我可以看到while循环是使套接字侦听新连接的原因。(意味着php脚本永不停止)这些示例将响应套接字的输出 据我所知,这是伟大的,如果你只是想一个简单的网站 但事实并非如此。我想使用JavaScript构建这个应用程序,以“询问”套接字是否有任何新消息,然后相应地呈现消息 因为我对PHP套接字非常陌生,所以我不确定这是否应该

我有一个学校项目,我需要创建一个即时网络信息系统

为了完成这项任务,我研究了PHP套接字

从这些我开始看到一个模式。正如您所知,PHP只能运行一次(从上到下),从这些示例中,我可以看到while循环是使套接字侦听新连接的原因。(意味着
php脚本
永不停止)这些示例将响应套接字的输出

据我所知,这是伟大的,如果你只是想一个简单的网站

但事实并非如此。我想使用JavaScript构建这个应用程序,以“询问”套接字是否有任何新消息,然后相应地呈现消息


因为我对PHP套接字非常陌生,所以我不确定这是否应该完全由PHP完成,或者是否可以使用JavaScript来监听套接字(通过Ajax),然后将输出打印为
JSON

我建议您使用第三方库(好吧,再次向您推荐此库:)。阅读其教程,您将更清楚地了解如何使用WebSocket协议在浏览器和服务器之间进行通信


服务器完全可以用纯PHP实现

通常,对于基于推送的通知,您需要的协议(仅适用于较新的浏览器)是WebSocket

有多种图书馆和服务可以为您做到这一点:

Pusher是一项在线服务,可以与多种语言集成,为您提供实时功能

仅在JavaScript中,如果您有节点,则应查看socket.io:


在.NET领域,有一个signar,它非常棒

不仅可以使用PHP,还可以使用它。Throuway是用于Websocket传输的PHP客户端/路由器。WAMP通过WebSocket为您提供Sub/Pub和RPC

您需要创建一个简单的php路由器,并从命令行启动它。大概是这样的:

<?php
require 'vendor\autoload.php';
use Thruway\Peer\Router;
use Thruway\Transport\RatchetTransportProvider;

$router = new Router();
$transportProvider = new RatchetTransportProvider("127.0.0.1", 9090);
$router->addTransportProvider($transportProvider);

我实际上使用了一个基于PHP的websocket并对其进行了修改。如果你愿意,我可以双向工作。您可以将发送到websocket的消息存储在数组中,甚至可以将它们保存到数据库中。客户端可以请求新消息:

请看以下代码:

    function createConnectionToWebSocket(connection)
    {
        var host = "ws://[ip of server]:9000/echobot"; // SET THIS TO YOUR SERVER --> 9000 is the port used by websockets.
        try {
                socket = new WebSocket(host);
                console.log('WebSocket - status '+socket.readyState);
                socket.onopen    = function(msg) { 
                                       console.log("Welcome - status "+this.readyState);

                                   };
                socket.onmessage = function(msg) { 
                                       messageHandlerSocket(msg.data);
                                   };
                socket.onclose   = function(msg) { 
                                       console.log("Disconnected - status "+this.readyState); 
                                       if (msg && !msg.wasClean && msg.code == 1006)
                                       {

                                       }
                                   };
                socket.onerror   = function(msg) { 

                                   };                       
            }
            catch(ex){ 
                console.log(ex); 
            }


    }

    function messageHandlerSocket(msg)
    {
        //all messages will be send in JSON
        var msg = JSON.parse(msg)
        //received JSON and check the type. Type is message
        switch (msg.type)
        {
            case "messages" :
                //code when the webserver sends back the messages.                                      

            break;
        }
   }


   socket.send(JSON.stringify({"type" : "retrievemessages", "user" : user.id}));
Socket.send
允许您将数据发送到PHP服务器。我发送JSON并在服务器上解析它。基于
type
参数,我让PHP服务器将数据发送回相应的用户

我扩展了在上找到的此Web服务器

通过bat文件运行Web服务器

@ECHO关闭
回显启动Web服务器
使用[dir to php dir]\php\php.exe进行回显
@回音
启动“WEBSOCKET”/wait/B“[dir to php dir]\php\v5.6\php.exe”-f[WEBSOCKET.php的路径]

尽管下面提到了它,而且它不使用PHP,但这可能与您想要的非常接近:请看:您能否与angular wamp分享您提到的简单聊天示例?