为了账号安全,请及时绑定邮箱和手机立即绑定

gatewayworker与tp3.2.3结合开发即时聊天示例

标签:
PHP

第一步:下载tp3.2.3、GatewayWorker、GatewayClient;解压后把tp和Gatewayworker放在同一个目录下面(根目录下面);
第二步:将GatewayClient中的Gateway.php重命名为Gateway.class.php;修改其内容如下:1.namespace Org\Util;2.第35行的$registerAddress的端口号修改和GatewayWorker/Application/YourApp/下的三个start_文件里面的“服务注册地址”下端口号一致;保存后将该文件放于tp框架的ThinkPHP/Library/Org/Util文件夹下;
第三步:将GatewayWorker中start_gateway.php的第24行Gateway括号内容修改为(“websocket://后面的不变”);Events.php的第40行修改为Gateway::sendToClient($client_id,json_encode(array('client_id'=>$client_id)));可注释第42行代码;
第四步:运行tp入口文件后,控制器Index.class.php文件内容如下:

<?php

namespace Home\Controller;

use Think\Controller;

class IndexController extends Controller {

    public function index() {
        $this->uid = I('uid');

        session('uid', $this->uid);
        $this->display();
    }

    function bind() {
        $uid = session('uid');
        $client_id = I('client_id');

        $gateway = new \Org\Util\Gateway();
        $gateway->bindUid($client_id, $uid);
        $message = '绑定成功' . $uid . '-' . $client_id;
        $gateway->sendToUid($uid, $message);
    }

    function message() {
        $to_uid = I('uid');
        $message = I('msg');
        $gateway = new \Org\Util\Gateway();
        $data['msg'] = $message;
        $data['from_uid'] = session('uid');
        $data['to_uid'] = $to_uid;
        $gateway->sendToUid($to_uid, json_encode($data)); //发给对方
        $gateway->sendToUid($data['from_uid'], json_encode($data)); //发给自己
        echo json_encode($data);
    }

}

视图文件index.html文件内容为:(其他文件自己建,不贴了)

<!DOCTYPE HTML>
<html>
<head>
    <meta charset="utf-8">
    <title>chatroom</title>
    <script type="text/javascript" class="lazyload" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB/AAffA0nNPuCLAAAAAElFTkSuQmCC" data-original="http://cdn.bootcss.com/jquery/3.1.1/jquery.min.js"/></script>

    <script type="text/javascript">
    // 打开一个 web socket
    var ws = new WebSocket("ws://127.0.0.8:8282");

    ws.onopen = function ()
    {

    };

    ws.onmessage = function (evt)
    {
        var received_msg = evt.data;
        alert("数据已接收..." + received_msg);
        var jmsg = JSON.parse(received_msg);
        if (jmsg.from_uid > 0) {
            var t_msg = '<li>' + jmsg.from_uid + ' 说:' + jmsg.msg + '</li>';

            $("#message").append(t_msg);
        }
        if (jmsg.client_id.length != 0) {
            $.post("{:U('bind')}", {client_id: jmsg.client_id}, function (data) {

            });
        }
    }
    </script>
</head>
<body>
<ul id="message">

</ul>

<div>
    <input name="uid" value="1" >
    <input name="msg" value="" size="50">
    <button type="button" id="send" >发送</button>
</div>

<script>
    $(function () {
        $("#send").click(function () {
            var uid = $('input[name="uid"]').val();
            var msg = $('input[name="msg"]').val();
            $.post("{:U('message')}", {uid: uid, msg: msg}, function (data) {
                $('input[name="msg"]').val('');
            });

        });
    });
</script>
</body>
</html>

第五步:打开GatewayWorker文件下的.bat文件,去浏览器中访问你设置的虚拟路由地址即可。
这个是非常简单的demo吧,仅提供思路什么的,欢迎大神指点一二。另外这个如果在本地运行的话,因为你的电脑ip是唯一的,所以你的uid是唯一的,不会因为你打开两个浏览器就可以实现对话了。不过当你能在一个浏览器上收到自己发出的消息,基本没问题了。
目前还没解决的问题:如何在windows下,不手动运行.bat文件,使其自动运行gatewayworker环境,这个.bat作用不多说,因为我自己的网站也是windows的。

点击查看更多内容
12人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消