繁体   English   中英

使用JavaScript的即时通讯系统

[英]instant messaging system using JavaScript

我有一个学校项目,我需要创建一个基于Web的即时消息系统。

Ive查看了PHP套接字以完成此任务PHP套接字手册

从这些即时消息开始看到一种模式。 众所周知,PHP只能运行一次(从上到下),从这些示例中,我可以看到while循环是使套接字侦听新连接的原因。 (这意味着php script永不停止)这些示例将回显套接字的输出。

据我所见,如果您只想要一个简单的网站,这很好。

然而,这种情况并非如此。 我想使用JavaScript构建此应用程序,以在有任何新消息时“询问”套接字,如果有则相应地呈现消息。

由于对PHP套接字来说是非常新的东西,因此我不确定是否应仅由PHP完成此操作,或者不确定是否可以使用JavaScript来监听套接字(通过Ajax),然后将输出打印为JSON

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

该服务器绝对能够用纯PHP实现!

通常,对于基于推送的通知,您想要的协议(仅适用于更新的浏览器)是WebSockets。

有各种各样的库和服务可以为您做到这一点:

Pusher是一项在线服务,可以与多种语言集成以提供实时功能。 https://pusher.com/

在JavaScript中唯一的,如果你有节点你应该看看socket.io: http://socket.io/

在.NET领域,有SignalR真是太棒了http://signalr.net/

不仅可以使用PHP进行操作,而且还可以通过Thruway进行操作 Thruway是一个WAMPv2 PHP客户端/路由器,它使用Ratchet进行Websocket传输。 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);

然后在客户端上,使用AutobahnJS;如果您使用的是angular,则可以使用angular-wamp

如果您还有问题,我将举一个简单的聊天示例。

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

看这段代码:

    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服务器将数据发送回相应的用户。

我扩展了在Github上找到的该Web服务器。

通过bat文件运行Web服务器。

@ECHO OFF
ECHO STARTING WEBSERVER
ECHO USING [dir to php dir]\php\php.exe
@ECHO OFF

START "WEBSOCKET" /wait /B "[dir to php dir]\php\v5.6\php.exe" -f [path to your websocket.php]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM