发送websocket数据到任意客户端(例如基于用户名)



websockets是否可以:

  • UserA和UserB是一个站点的用户。
  • UserA登录站点并启动websocket连接。
  • UserB有一个消息给UserA,所以他们提交了一个表单,由服务器上的一些脚本处理(不管它是通过WS, XHR还是只是一个普通的表单)
  • 服务器通过websocket连接将消息发送给用户,而不需要服务器代码不断检查数据库是否有新消息。

理想情况下,处理消息发送的脚本将完成所有工作-将消息放入数据库并将其发送到接收者的websocket连接。

编辑:这是我对这种功能的实际设想:

我正在开发一个国际象棋网站,该网站目前使用长轮询来更新用户,当他们的对手移动时,以及其他一些东西,如棋盘下面的聊天框。

下面是用户调用来移动的PHP脚本,添加了代码(接近结尾)来说明我想要做的事情:

/xhr/move.php

<?php
require_once "base.php";
require_once "Data.php";
require_once "php/livechess/LiveGame.php";
require_once "php/init.php";
$result=false;
if($session->user->signedin()) {
    $q=Data::unserialise($_GET["q"]);
    if(isset($q["gid"]) && isset($q["fs"]) && isset($q["ts"])) {
        $colour=Db::cell("
            select colour from seats
            where user='{$session->user->username}'
            and gid='{$q["gid"]}'
            and type='".SEAT_TYPE_PLAYER."'
        ");
        if($colour!==false) {
            $promote_to=QUEEN;
            if(isset($q["promote_to"])) {
                $promote_to=$q["promote_to"];
            }
            $game=new LiveGame($q["gid"]);
            if($game->position->active===$colour) {
                if($game->move($q["fs"], $q["ts"], $promote_to)->success) {
                    $result=$game->history->main_line->last_move->mtime;
                    $game->check_premoves();
                    $game->save();
                    /*
                    here is where the functionality I'm talking to would come in:
                    (some pseudocode for brevity)
                    */
                    $opponent_username=Db::cell("select user from seats where colour=".opp_colour($colour)." and etc");
                    send_websocket_data($opponent_username, Data::serialise($game->history->main_line->last_move));
                }
            }
        }
    }
}
echo Data::serialise($result);
?>

我不知道send_websocket_data函数的实现是什么样子,除了它需要用户名和一些数据来发送。

是websocket与连接的客户端安装全双工连接。因此,服务器可以随时向它们发送消息。

那么实现取决于您的客户机和服务器。

你似乎喜欢php,你可以看看棘轮。我没有试过。

你也可以阅读websockets

还请记住,websockets不会在任何地方工作,主要取决于网络代理。因此,您可能必须处理长轮询的优雅降级。这就是异步框架所提供的,但在其他语言(atmosphere/java, Socket.oi/node.js)

Websockets很酷!祝你好运!

相关内容

  • 没有找到相关文章

最新更新